我正在使用 Ubuntu 16.10 来运行实验。我用Python scapy将两个数据包发送到通过交换机连接的机器。第一个数据包是一个普通的 TCP SYN 数据包,由第二台机器上的 nc 应用程序接收,我可以看到相应的 SYN/ACK 数据包。但是,我发送的第二个数据包包含一个 IP 选项松散源路由。第二个数据包在另一台机器上收到(我可以在wireshark中看到它)但没有交给应用程序,因此没有发送SYN/ACK。我想知道为什么会这样。
这是我正在使用的 scapy 代码:
数据包1:
pkt1=IP(src="10.0.0.2", dst="10.0.0.3")/TCP(sport=random.randint(54100,54300),dport=23800)
send(pkt1)
数据包2:
pkt2=IP(src="10.0.0.2", dst="10.0.0.3",options=IPOption('\x83\x03\x10'))/TCP(sport=random.randint(54100,54300),dport=23800)
send(pkt2)
答案1
默认情况下可能不接受源路由数据包。检查(根据您的设置net.ipv4.conf.eth0.accept_source_route
更改界面)第二台计算机上的设置。eth0
即使您能够使用wireshark看到数据包,它也可能被内核阻止。
您可以使用以下命令更改行为以接受源路由数据包
# /sbin/sysctl -w net.ipv4.conf.all.accept_source_route=1
请注意,启用此功能是安全风险