首页 > 解决方案 > 发送自定义 tcp 数据包时避免 RST 数据包

问题描述

我正在打包自己的 tcp 数据包并将其发送到另一台 ubuntu 机器。SYN 和 SYN-ACK 可以成功发送和接收。但是在收到 SYN-ACK 后,会发送一个 RST 数据包。以下是我使用套接字的方式:

同步:

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
#prepare customized ip header
#prepare customized tcp header
packet = ip_header + tcp_header + user_data
s.sendto(packet, (dest_ip , 0))

SYN-ACK 的 ACK:

#update the tcp header 
packet = ip_header + tcp_header + user_data
s.sendto(packet, (dest_ip , 0))

在发送第一个 SYN 并收到 SYN-ACK 后,发起机器将发送一个 RST 数据包。在此处输入图像描述

我猜客户端套接字已关闭,但不确定如何确认和修复它。先感谢您!

标签: pythonsocketstcp

解决方案


问题是操作系统有一个特性,当它收到一个 TCP 数据包到一个未知的套接字时,它会向发起者发送一个 RST。这个链接解释了它以及如何解决它。

https://widu.tumblr.com/post/43624355124/suppressing-tcp-rst-on-raw-sockets


推荐阅读