Scapy SYN 在我们自己的 IP 地址上发送
我尝试在我的本地网络上发送 SYN 数据包并使用 Wireshark 监视它们,一切正常,除了当我尝试将数据包发送到我自己的 IP 地址时,它“似乎”工作,因为它显示“已发送 1 个数据包”,但它是没有真正发送,我在 Wireshark 中看不到数据包,也看不到数据包的任何答案。我的设置是一台计算机 A ( 192.168.0.1 ),其 TCP 套接字服务器侦听端口 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 数据包和 RST/ACK(那里没有服务器在 192.168.0.2 上的端口 40508 上侦听,因此它从 192.168.0.2 发送 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 地址,我也会遇到同样的问题。
对于我的程序,我确实需要将 SYN 数据包发送到我自己的 IP 地址,有没有办法做到这一点还是不可能?
提前致谢,
诺尔希安
I tried to send SYN packets on my local network and monitoring them with Wireshark and everything works just fine, except when i try to send a packet to my own ip address it "seems" to work because it says Sent 1 packet, but it is not really sent, i can't see the packet in Wireshark nor any answers to the packet. My setup is a computer A ( 192.168.0.1 ) with a TCP Socket Server listening on port 40508, and a computer B ( 192.168.0.2 ).
On Computer B i test:
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)
It works fine, i see the SYN packet on Wireshark and the SYN/ACK response from 192.168.0.1
On Computer A i test:
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)
It works fine too, i see the SYN packet and the RST/ACK ( there is no server listening on port 40508 on 192.168.0.2 so it sends a RST/ACK ) response from 192.168.0.2
But when i try on Computer 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)
Nothing appears in Wireshark, as if the packet was never sent but it said like the other tests : Sent 1 packets. and returned no error whatsoever. If i run the same test on computer B and try to send a packet to its own IP address i got the same problem.
For my program i really need to send a SYN packet to my own IP address, is there a way to do that or is it impossible ?
Thanks in advance,
Nolhian
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的 Wireshark 安装正在侦听什么网络设备?我怀疑它正在监听实际的网卡(以太网、wifi 或其他网络,根据 Wireshark 常见问题解答)——当从计算机向自身发送数据时,操作系统当然可以绕过设备(为什么要费心呢?)并通过在 TCP/IP 堆栈中复制位来进行“发送”内核内存。
换句话说,我怀疑您的数据包发送正常,只是 Wireshark 可能看不到它。为了验证这个假设,您可以尝试(例如)使用浏览器访问本地计算机上存在和不存在的端口,并查看 Wireshark 是否看到这些数据包。
What network device(s) is your Wireshark installation listening on? I suspect it's listening on the actual network card (ethernet, wifi, or otherwise, as per the Wireshark FAQ) -- and when sending from a computer to itself the OS can of course bypass the device (why bother with it?) and just do the "sending" by copying bits around within the TCP/IP stack in kernel memory.
In other words I suspect your packet is being sent OK, just Wireshark may not see it. To verify this hypothesis, you could try (e.g.) using your browser to visit existent and nonexistent ports on your local machine, and see if Wireshark sees those packets or not.