2017-09-17 52 views
1

私はPythonで書かれたソケットプロキシを持っています。通信プロキシのペアからRSTを受け取ると、ソケットがガベージコレクションされることによって両方のピアへの接続が閉じられます。この結果、他のピアはRSTではなくFINを表示します。PythonでTCPソケットをリセットするにはどうしたらいいですか?

これは、プロキシが効果的にRSTをFINに変換することを意味します。これは理想的ではないと思います。

Linuxでreset a TCP connnectionに接続するには、アドレスAF_UNSPECを使用してconnectを呼び出すことができます。しかし、私はこれをPythonプログラムから行う方法を見つけていません。

connectAF_UNSPECのアドレスはどうすればよいですか?私に何address引数を教えてくれない

Help on built-in function connect: 

connect(...) 
    connect(address) 

    Connect the socket to a remote address. For IP sockets, the address 
    is a pair (host, port). 

残念ながら:私は、関連するconnect方法についてhelp出力を見てみましたし、これを見つけた私は、これまで

を試してみましたが、何

アドレスAF_UNSPECを構築する必要があります。

私はこのような家族AF_UNSPECで新しいソケットオブジェクトの元のソケットのfdをラップしようとした:

socket.fromfd(s.fileno(), socket.AF_UNSPEC, 0) 

結果のオブジェクトが同じヘルプテキストおよび新しく構築されたソケットオブジェクトにconnectを呼び出すしようとする試みを作ります結果は

socket.error: getsockaddrarg: bad family 

です。socket.fromfdのように見えますが、おそらく私の質問に対する答えではありません。

答えて

0

あなたはRSTの代わりに、FINになり時間が長引く0秒でSO_LINGERセットでソケットに0 closeに設定するリンガー時間でSO_LINGERソケットオプション(setsockopt)を使用しようとすることができます。

+0

私は 'c.setsockopt(socket.SOL_IP、socket.SO_LINGER、0)'をテストしたが動作しなかった。私が望んでいたように 'FIN'では' RST'ではなくコネクションが閉じられました。 – kasperd

関連する問題