我正在使用Python的socket.py创建到FTP服务器的连接。现在,我想重置连接(发送RST标志)并监听FTP服务器的响应。(顺带一提,使用socket.send('','R')不起作用,因为操作系统发送FIN标志而不是RST。)
我正在使用Python的socket.py创建到FTP服务器的连接。现在,我想重置连接(发送RST标志)并监听FTP服务器的响应。(顺带一提,使用socket.send('','R')不起作用,因为操作系统发送FIN标志而不是RST。)
打开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()
如果要在TCP连接上发送RST,请将SO_LINGER
选项设置为true
,超时时间为零,然后关闭套接字。这将重置连接。我不知道如何在Python中实现这一点,或者是否可以实现。