2016-07-27 7 views
0

私は、特定のポートとの送信TCP接続を監視し、必要に応じてそれらをブロックする透過プロキシをC++で実装しようとしています。トランスペアレントプロキシで元の宛先アドレスを追跡する方法

私はlocalhostに、ポート9002宛ての通話を転送するためのルールを定義したポート9001のように:

sudo iptables -t nat -A OUTPUT -p tcp --dport 9002 -j DNAT --to-destination 127.0.0.1:9001 

クライアントが

で(も同じホストで実行されている)サーバーに接続しようとします
./client 127.0.0.1 9002 

コールはポート9001に転送され、ポート9001でリスニングするアプリケーションは接続を正しく取得します。私の質問は、ポート9001で実行されているアプリケーションが、このコールを完了した後にこのコールをオリジナルの宛先127.0.0.1:9002に送信する必要があることを知ることができますか?

struct sockaddr_in sockaddr; 
socklen_t len = sizeof(sockaddr); 
getsockname(socketfd, (struct sockaddr *) &sockaddr, &len); 

が、私が望んでいないこの戻り127.0.0.1:44853:ポート9001にリスニングアプリケーションのように受け入れられたソケットののgetsocknameを呼び出してみました。

答えて

0

これがまだ1年後にも役立つかどうかわかりません... あなたはLinux上でNATを使用していると思います。 私はSO_ORIGINAL_DSTでgetsockoptを使うことができると信じています...

関連する問題