了解“已回答”的发送和接收条件

时间:2018-02-23 23:02:16

标签: python scapy icmp

在这个例子中:

>>> 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使用什么标准将数据包分成这三类? (收到,回答,剩下)

同样,有没有办法访问收到的数据包?看起来这个函数只返回已回答的数据包。

1 个答案:

答案 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
>>> 

显示答案摘要:发送的数据包和收到的数据包。