Я хочу захватить и распечатать адрес источника запросов ping. У меня есть следующий сценарий:Python scapy show ip запросов ping (echo)
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 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
Мы можем игнорировать «пакет прибыл» несколько раз, потому что другие пакеты достигают моего хоста, как привет л. Но почему я вижу 6 раз 127.0.0.1, когда я отправил 3 эхо-запроса? Даже если я удаляю цикл for, получаются те же результаты.
Здесь я не использую [0], хотя .. и то же самое происходит http://www.picpaste.com/pics/icmp_problem-g3q981FT.1429788898.png – user3124171
Добавить 'print (pkts.summary()) 'перед циклом, а затем скажите мне, что не соответствует –
LOL. Это довольно интересно ... Проблема здесь явно ... Это ошибка в scapy ?? http://www.picpaste.com/pics/scapy_hmmm_-IKNMgx5i.1429789818.png http://www.picpaste.com/pics/ICMP_LOL-VC2psSk5.1429789532.png Похоже, он дублирует записи каким-то образом ... Из моего tcpdump (который определенно не лежит) вы можете видеть, что я посылаю 3 запроса и 3 ответа вернулся ... Где scapy показывает их 2 раза ... Как вы думаете? – user3124171