TCP服务器未响应Scapy生成的SYN数据包问题排查
问题原因分析
核心问题出在以太网帧的目标地址上:
- Scapy生成的数据包以太网目标地址为
ff:ff:ff:ff:ff:ff(广播地址) - nmap生成的数据包以太网目标地址为
00:00:00:00:00:00(环回接口的单播地址)
环回接口的内核网络栈会过滤广播类型的数据包,导致Scapy发送的SYN包无法传递到用户态的TCP监听程序,自然不会返回SYN-ACK。
解决方法
修改Scapy代码,手动指定以太网层的单播目标地址,并明确指定环回接口发送:
from scapy.all import * import random # 手动指定以太网层的单播地址 eth = Ether(dst="00:00:00:00:00:00", src="00:00:00:00:00:00") ip = IP(src="127.0.0.1", dst="127.0.0.1") src_port = random.randint(49152, 65535) tcp = TCP( sport=src_port, dport=7878, flags="S", seq=random.randint(0, 3_925_315), options=[('MSS', 1460)] ) syn_packet = eth/ip/tcp print(f"Using source port: {src_port}") print(syn_packet.show()) # 指定环回接口发送 send(syn_packet, iface="lo")
验证要点
- 抓包确认修改后的数据包以太网目标地址为
00:00:00:00:00:00 - 确保发送时明确指定
iface="lo",避免Scapy自动选择错误的网络接口
内容的提问来源于stack exchange,提问作者user16732580
相关产品推荐
相关产品推荐

