2017-05-11 9 views
1

ソフトとサーバーの間にTCP通信のバグがあります。タイムアウトルータは、暗黙的ににクライアントに通知せずに接続を閉じます(通常はFINパケットで行われます)。iptablesを使って壊れた接続をエミュレートする

このような状況で私のtcpdumpのログ:

ソフトが開き、接続してメッセージをプッシュしようとします。サーバで

09:29:41.438050 IP CLIENTIP.33668 > SERVERIP.8101: Flags [P.], seq 163:228, ack 144, win 229, options [nop,nop,TS val 96713087 ecr 4169733508], length 65

(実際中央)側この接続は既に破壊し、サーバは、リセットパッケージにansweresました。

09:29:41.447415 IP SERVERIP.8101 > CLIENTIP.33668: Flags [R], seq 3072817047, win 0, length 0

私はこのケースをデバッグしようとしていますが、これsitutationはかなり長いタイムアウトの後happenes。

私の考えは、iptablesを使ってこの状況をエミュレートすることでした。私のクライアントのための一例の変更先のポートの場合:

sudo iptables -t nat -D OUTPUT -p tcp --destination-port 8101 -j DNAT --to-destination SERVERIP:8102

しかし、このルールは、新しいTCP接続のために動作しますが、私はすでに確立された接続上のパケットの内容を変更する必要があります。誰かがどのようにすべてのパッケージの宛先ポートにtcpdumpルールを書くことができますか?

答えて

1

netemのようなものを使用して、遅延パケットまたはドロップパケットを追加しましたか?私はそれがiptablesよりあなたのためにうまくいくと思う。

+0

おかげで面白そうですが、私はこのRSTパケット(サイレントドロップ接続をエミュレートする)を生成する確実性を見出していません。実際にはlibpcapアプリケーションの方が簡単です – Oleg

関連する問題