我正在使用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'標誌中? –