在TCP/IP Socket连接中发送重置
我正在使用Python的socket.py来连接一个ftp服务器。现在我想重置这个连接(发送一个RST标志),并监听ftp服务器的回应。(顺便说一下,使用socket.send('','R')并不能实现,因为操作系统会发送FIN标志,而不是RST。)
4 个回答
3
如果你想在连接上实现自己的功能,我觉得你可以试试 Scapy。这是一个非常有用的库和工具。它可以让你玩弄 IP、TCP、UDP 和 ICMP 数据包。
3
要在TCP连接上发送一个重置信号(RST),你需要把一个叫SO_LINGER
的选项设置为true
,并且把超时时间设置为零,然后关闭这个连接的套接字。这样就会重置连接。我不知道在Python中怎么做到这一点,或者说是否能做到。
47
打开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()