在TCP / IP套接字连接中发送重置

时间:2011-06-22 12:26:39

标签: python sockets networking reset

我正在使用python的socket.py来创建与ftp-server的连接。现在我想重置连接(发送RST标志)并监听ftp-server的响应。 (使用socket.send('','R')的FYI不起作用,因为OS发送FIN标志而不是RST。)

3 个答案:

答案 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包。