我正在使用python的socket.py创建到ftp服务器的连接。现在我想重置连接(发送RST标志)并监听ftp服务器的响应。 (使用socket.send('','R')的FYI不起作用,因为操作系统发送FIN标志而不是RST。)在TCP/IP Socket连接中发送重置
回答
如果要通过连接实现自己的行为,我认为您应该尝试使用Scapy。这是一个非常有用的库/工具。它可以让你玩IP/TCP/UDP/ICMP包。
要在TCP连接上发送RST,请将SO_LINGER
选项设置为true
,并且超时时间为零,然后关闭套接字。这会重置连接。我不知道如何在Python中做到这一点,或者甚至是否可以做到这一点。
打开SO_LINGER插座选项并将延迟时间设置为0秒。这将导致TCP在关闭时中止连接,刷新数据并发送RST。参见UNP中的第7.5节和第15.21节。
在蟒蛇:
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。 – EJP
对于那些好奇的人来说,有一些更多的信息:SO_LINGER的时间为0秒意味着TCP堆栈不会在close()周围“流连忘返”:它将丢弃任何未发送的数据并发送RST而不是FIN。欲了解更多信息,请阅读[this](http://developerweb.net/viewtopic.php?id=2982)和[this](http://www.pcvr.nl/tcpip/tcp_conn.htm)。 –
请注意,如果您在Microsoft Windows环境中使用此代码,则需要用“hh”替换对struct.pack()的调用中的'ii'。 Windows在struct linger中使用短裤,Linux使用ints。 –
- 1. Windows 2008并发TCPIP连接
- 2. socket与EOF和连接重置失败
- 3. Socket编程:连接重置异常 - Java
- 4. 在Android中发送和接收Socket Java
- 5. “连接被重置”仅在Firefox中发送时,http发回
- 6. break tcpip连接方法
- 7. TCPIP服务器单连接
- 8. 在JMeter java.net.SocketException中:发生连接重置
- 9. Udp Socket稳定发送,突发接收
- 10. Socket连接
- 11. Socket连接
- 12. Socket连接Windows
- 13. Android Socket连接
- 14. 如何处理socket程序中的连接重置错误
- 15. gevent tcp socket已断开连接但可以发送数据
- 16. 已连接Flash Socket但未发送数据
- 17. 如何将URL参数发送到Socket连接
- 18. 无线连接在Android的Socket连接
- 19. 在发送大数据时由对端重置Tcp连接
- 20. 通过Socket连接发送一个String []数组
- 21. 发送和接收Java Socket错误
- 22. Raw Socket Linux发送/接收数据包
- 23. 重试Android Socket连接超时
- 24. 连接TCPIP与QT Connect冲突
- 25. Socket连接中止 - WCF
- 26. 通过TCPIP套接字发送数据到Zabbix
- 27. 最大Socket连接
- 28. flup和socket连接
- 29. 连接返回时重新发送ASIHTTPRequest
- 30. SSL Socket连接iOS
为什么你要重置连接? – EJP
复制恶意ftpclient – Anvay
你是什么意思“重置连接”?在TCP/IP'RST'标志中? –