我正在使用python的socket.py来创建与ftp-server的连接。现在我想重置连接(发送RST标志)并监听ftp-server的响应。 (使用socket.send('','R')的FYI不起作用,因为OS发送FIN标志而不是RST。)
答案 0 :(得分:33)
打开SO_LINGER套接字选项并将延迟时间设置为0秒。这将导致TCP在关闭时中止连接,刷新数据并发送RST。参见UNP中的7.5节和例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()
答案 1 :(得分:1)
要在TCP连接上发送RST,请将SO_LINGER
选项设置为true
,超时为零,然后关闭套接字。这会重置连接。我不知道如何在Python中做到这一点,或者甚至你是否能做到这一点。
答案 2 :(得分:0)
如果您想在连接上实现自己的行为,我认为您应该尝试使用Scapy。这是一个非常有用的库/工具。它允许您使用IP / TCP / UDP / ICMP包。