Scapy:原始ICMP数据包无回复

2 投票
1 回答
5700 浏览
提问于 2025-04-16 14:11

我用 scapy 构建了一个数据包:

a=IP(dst='192.168.0.1',proto=1)/'\x08\x00\xf7\xff\x00\x00\x00\x00'

我运行了:

send(a)

Wireshark 显示我收到了来自 192.168.0.1 的 ping 请求和 ping 响应,没有警告,所有字段都正确。

但是当我尝试:

b=sr1(a)

然后 Scapy 收不到回应(Wireshark 再次显示有请求和回复)。

我该怎么办呢?

1 个回答

3

问题在于,scapy 不知道怎么识别你的响应,因为你是用比较复杂的方式自己构建一个 ICMP 数据包。如果你用 ICMP() 来构建,它就能正常工作了...

>>> from scapy.all import ICMP, IP, sr1
>>> aa = IP(dst='192.168.0.1')/ICMP()
>>> sr1(aa)
Begin emission:
Finished to send 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets
<IP  version=4L ihl=5L tos=0x0 len=28 id=21747 flags= frag=0L ttl=60 proto=icmp 
chksum=0x1a77 src=192.168.0.1 dst=4.121.2.25 options=[] |<ICMP  type=echo-reply 
code=0 chksum=0x0 id=0x0 seq=0x0 |<Padding  
load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>>
>>>

撰写回答