在我们自己的IP地址上使用Scapy发送SYN

6 投票
1 回答
15304 浏览
提问于 2025-04-16 01:04

我尝试在本地网络上发送SYN数据包,并用Wireshark监控它们,一切都很正常,除了当我尝试向自己的IP地址发送数据包时,它“看起来”工作正常,因为显示发送了1个数据包,但实际上并没有真正发送,我在Wireshark中看不到这个数据包,也没有收到任何回复。我的设置是计算机A(192.168.0.1)上有一个TCP Socket服务器在40508端口监听,计算机B(192.168.0.2)则是另一台电脑。

在计算机B上我测试:

ip=IP(src="192.168.0.2",dst="192.168.0.1")  
SYN=TCP(sport=40508,dport=40508,flags="S",seq=12345)
send(ip/SYN)

一切正常,我在Wireshark中看到了SYN数据包,以及来自192.168.0.1的SYN/ACK响应。

在计算机A上我测试:

ip=IP(src="192.168.0.1",dst="192.168.0.2")  
SYN=TCP(sport=40508,dport=40508,flags="S",seq=12345)
send(ip/SYN)

这也正常,我看到了SYN数据包,以及来自192.168.0.2的RST/ACK响应(因为在192.168.0.2的40508端口没有服务器在监听,所以它发送了RST/ACK)。

但是当我在计算机A上尝试:

ip=IP(src="192.168.0.2",dst="192.168.0.1")  
SYN=TCP(sport=40508,dport=40508,flags="S",seq=12345)
send(ip/SYN)

在Wireshark中什么都没有出现,就好像数据包从未发送过,但它和其他测试一样显示:发送了1个数据包,并且没有返回任何错误。如果我在计算机B上运行相同的测试,尝试向自己的IP地址发送数据包,我也遇到了同样的问题。

对于我的程序,我真的需要向自己的IP地址发送一个SYN数据包,有没有办法做到这一点,还是说这是不可能的?

提前谢谢,

Nolhian

1 个回答

2

你的Wireshark安装正在监听哪个网络设备呢?我猜它是在监听实际的网络卡(比如以太网卡、无线网卡等,具体可以参考Wireshark的常见问题)。当你从一台电脑发送数据到自己时,操作系统可以直接绕过这个设备(为什么还要用它呢?),而是通过在内核内存中的TCP/IP协议栈里复制数据来完成“发送”。

换句话说,我怀疑你的数据包其实是发送成功的,只是Wireshark可能没有捕捉到。为了验证这个猜想,你可以试着用浏览器访问你本地机器上存在和不存在的端口,看看Wireshark是否能捕捉到这些数据包。

撰写回答