私は、特定のポートとの送信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を呼び出してみました。