我尝试在我的本地网络上发送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 i测试:
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数据包和RST / ACK(没有服务器侦听192.168.0.2上的端口40508,因此它发送RST / ACK)响应来自192.168.0.2
但是当我尝试使用计算机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地址,我也会遇到同样的问题。
对于我的程序,我真的需要将SYN数据包发送到我自己的IP地址,有没有办法做到这一点,还是不可能?
提前致谢,
Nolhian
答案 0 :(得分:2)
您的Wireshark安装正在监听哪些网络设备?我怀疑它正在侦听实际的网卡(以太网,wifi或其他方式,根据Wireshark FAQ) - 当从计算机发送到自身时,操作系统当然可以绕过设备(为什么要烦扰它) ?)并通过在内核内存中的TCP / IP堆栈中复制位来执行“发送”。
换句话说,我怀疑你的数据包 被发送好了,只是Wireshark可能看不到它。要验证此假设,您可以尝试(例如)使用浏览器访问本地计算机上现有和不存在的端口,并查看Wireshark是否看到那些数据包。