我正在使用Python原始套接字实现TCP握手。然而,Linux内核试图处理这个协议的某些方面,所以有些麻烦。例如,当我发送一个SYN数据包时,服务器会响应一个SYN,ACK数据包;此时内核会自动发送一个RST数据包来重置连接。我通过使用以下iptables规则来丢弃所有这样的重置数据包来解决这个问题:
我怀疑内核在我使用套接字接收之前就丢弃了SYN、ACK。有人知道一个合理的解决方法吗?
-A OUTPUT -p tcp -m tcp --sport 999 --tcp-flags RST RST -j DROP
现在我希望接收服务器发送的SYN, ACK数据包并将其打印出来。但是,当我执行以下操作时,我什么也没有收到:
a = self.s.recvfrom(4096)
我怀疑内核在我使用套接字接收之前就丢弃了SYN、ACK。有人知道一个合理的解决方法吗?