- 345 名前:login:Penguin [2007/09/29(土) 23:45:42 ID:KUrKiugz]
- iptables を使用してトランスペアレントプロキシを作成しようとしています。
ポート10000に届くすべてのあて先IPアドレスを自身宛に書き換えて受け取っています。 その状態で getsockopt()に SO_ORIGINAL_DSTを与えると本来のあて先アドレスがわかるということで試していますが上手くいきません。 ENOPROTOOPT : 指定された層(level)にはこのオプションは存在しない というエラーが返されます。 どのように解決すれば良いかわからず投稿させていただきました。 アドバイスがございましたらよろしくお願いします。 環境 fedoracore6 2.6.18-1.2798.fc6xen gcc 4.1.1 -----------------------------一部抜粋----------------------------------- int sock; socklen_t len; struct sockaddr_in addr0,orig_dst; addr0.sin_family = AF_INET; addr0.sin_port = htons(10000); addr0.sin_addr.s_addr = htonl(INADDR_ANY); sock = socket(AF_INET,SOCK_DGRAM,0); bind(sock,(struct sockaddr *)&addr0,(socklen_t)sizeof(addr0)); len = (socklen_t)sizeof(orig_dst); if(getsockopt(sock,SOL_IP,SO_ORIGINAL_DST,(struct sockaddr *)&orig_dst,(socklen_t *)&len)){ perror("getsockopt"); } -------------------------------------------------------------------------
|

|