在这个例子中:
>>> sr1(IP(dst="192.168.200.254")/ICMP())
Begin emission:
..Finished to send 1 packets.
.*
Received 97 packets, got 1 answers, remaining 0 packets
<IP version=4L ihl=5L tos=0x0 len=28 id=1 flags= frag=0L ttl=255 proto=icmp chksum=0xa7c4 src=4.2.2.1 dst=172.16.20.40 options=[] |<ICMP type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |<Padding |>>>
Scapy使用什么标准将数据包分成这三类? (收到,回答,剩下)
同样,有没有办法访问收到的数据包?看起来这个函数只返回已回答的数据包。
答案 0 :(得分:1)
根据文档功能sr1,只返回一个回答数据包的数据包。如果要收集/操作收到和应答的数据包,您应该使用函数sr()来发送数据包和接收答案。该函数返回几个数据包和答案,以及未答复的数据包。例如:
>>> ans, unans=sr(IP(dst="192.168.0.1") / ICMP())
Begin emission:
.Finished to send 1 packets.
*
Received 2 packets, got 1 answers, remaining 0 packets
返回已回答和未回复的结果列表。并回答结果是对(包发送,回答)。所以下面的代码:
>>> for snd, rcv in ans:
... print("snd={} rcv={}".format(snd.summary(), rcv.summary()))
...
snd=IP / ICMP 192.168.0.109 > 192.168.0.1 echo-request 0 rcv=IP / ICMP 192.168.0.1 > 192.168.0.109 echo-reply 0
>>>
显示答案摘要:发送的数据包和收到的数据包。