Pythonのsocket.pyを使用してftpサーバーへの接続を作成しています。次に、接続をリセットし(RSTフラグを送信)、ftpサーバーの応答をリッスンします。 (OSがRSTの代わりにFINフラグを送信するため、socket.send( ''、 'R')を使用するFYIは機能しません。)
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()
TCP接続でRSTを送信するには、タイムアウトなしでSO_LINGER
オプションをtrue
に設定し、ソケットを閉じます。これにより、接続がリセットされます。 Pythonでそれを行う方法、または実際にそれを行うことができるかどうかさえわかりません。
接続を介して独自の動作を実装する場合は、 Scapy を使用してみてください。それは本当に便利なライブラリ/ツールです。 IP/TCP/UDP/ICMPパッケージで遊ぶことができます。