Linuxプログラミング
..
345:login:Penguin
07/09/29 23:45:42 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");
}
-------------------------------------------------------------------------
次ページ続きを表示1を表示最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4071日前に更新/218 KB
担当:undef