我已经实现了TCP握手协议,可与Internet上的某些服务器一起使用。
我尝试连接使用以下几行Python创建的本地演示服务器:
import socket
sock = socket.socket(sock.AF_INET, socket.SOCK_STREAM)
sock.bind(("localhost", 5678))
sock.listen(1)
conn, addr = sock.accept()
print(conn, addr)
用Scapy创建的SYN数据包
from random import getrandbits
ip = IP(dst="127.0.0.1")
tcp = TCP(dport=5678, sport=7890, flags="S", seq=getrandbits(16))
packet = ip / tcp
send(packet)
当我在Wireshark中检查流时,对此数据包没有响应,但是当我检查sock.connect(("localhost", 5678))
的流时,我发现一切正常(SYN -> SYN/ACK -> ACK
),但校验和已标记为不正确< / strong>并显示消息可能是由于“ TCP校验和卸载”引起的?。
当我尝试从answer接收原始数据包时,我得到了有效的SYN数据包。
SYN数据包有什么问题?如何使用socket.accept()
手动连接服务器?