web-dev-qa-db-ja.com

TCP / IPソケット接続でリセットを送信する

Pythonのsocket.pyを使用してftpサーバーへの接続を作成しています。次に、接続をリセットし(RSTフラグを送信)、ftpサーバーの応答をリッスンします。 (OSがRSTの代わりにFINフラグを送信するため、socket.send( ''、 'R')を使用するFYIは機能しません。)

18
Anvay

SO_LINGERソケットオプションをオンにして、残り時間を0秒に設定します。これにより、TCPは接続が閉じられたときに接続を中止し、データをフラッシュしてRSTを送信します。セクション7.5およびUNPの例15.21を参照してください。

Pythonの場合:

def client(Host, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
    s.connect((Host, port))
    l_onoff = 1                                                                                                                                                           
    l_linger = 0                                                                                                                                                          
    s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER,                                                                                                                     
                 struct.pack('ii', l_onoff, l_linger))
    # send data here
    s.close()
35
crowbent

TCP接続でRSTを送信するには、タイムアウトなしでSO_LINGERオプションをtrueに設定し、ソケットを閉じます。これにより、接続がリセットされます。 Pythonでそれを行う方法、または実際にそれを行うことができるかどうかさえわかりません。

1
user207421

接続を介して独自の動作を実装する場合は、 Scapy を使用してみてください。それは本当に便利なライブラリ/ツールです。 IP/TCP/UDP/ICMPパッケージで遊ぶことができます。

1