我想获取并打印ping请求的源地址。
我有以下脚本:pkt = sniff(filter="icmp", timeout =15, count = 15)
if pkt[ICMP].type == '8':
print pkt[IP].src
当数据包到达时,脚本崩溃AttributeError:'list' object has no attribute 'type'
但是在scapy控制台上我可以清楚地看到这个存在!>>>packet=IP()/ICMP()/"AAAAAA"
>>>packet[ICMP].type
8
>>>
有什么想法吗??
我为了测试的目的改变了(!)我的脚本如下:pkts=sniff(filter="icmp", timeout=120,count=15)
for packet in pkts:
if packet.haslayer(IP) and str(packet.getlayer(IP).src)=="127.0.0.1"
print "packet arrived"
if packet.haslayer(ICMP) and str(packet.getlayer(ICMP).type)=="8":
print(packet[IP].src)
执行ping之后,执行上述操作:ping localhost -c 3
产生以下尴尬的结果:packet arrived
127.0.0.1
packet arrived
127.0.0.1
packet arrived
packet arrived
packet arrived
127.0.0.1
packet arrived
127.0.0.1
packet arrived
packet arrived
packet arrived
127.0.0.1
packet arrived
127.0.0.1
packet arrived
我们可以多次忽略“数据包到达”,因为其他数据包也正在到达我的主机。但是为什么我在发送3个echo请求时看到127.0.0.1的6倍呢?即使我移除for循环,也会发生相同的结果。