Проблема с чтением IP-адреса назначения из файла pcap - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь прочитать список IP-адресов назначения из файла pcap, проблема заключается в том, что при запуске l oop a появляется эта ошибка

Traceback (most recent call last):
  File "/root/PycharmProjects/pcap/pcap.py", line 10, in <module>
    print(pcap[4]['IP'].show())
  File "/root/venv/pcap/lib/python3.7/site-packages/scapy/packet.py", line 1171, in __getitem__
    raise IndexError("Layer [%s] not found" % lname)
IndexError: Layer ['IP'] not found

При проверке Wireshark я обнаружил, что ошибка появляется из-за запросов, сделанных vmware, поскольку я написал этот код на виртуальной машине Kali. Вот мой код

from scapy.all import *
from nmap import *
from collections import OrderedDict

scanner = nmap.PortScanner()
pcap = rdpcap('/root/Downloads/nakerah.pcap')

ip_list = []
x = 0
while x < 4:
    host_ip = pcap[x]['IP'].dst
    ip_list.append(host_ip)
    final_list = list(OrderedDict.fromkeys(ip_list))
    x += 1

print(final_list)

1 Ответ

0 голосов
/ 11 марта 2020

Ошибка говорит вам точно, что вам нужно знать.

IndexError: Уровень ['IP'] не найден

Один из пакетов в ваших пакетах перехватывает это не содержит уровень IP. Вы должны проверить, существует ли уровень IP, прежде чем получить к нему доступ. Например, пакет ARP не будет иметь IP-уровня и нарушит ваш код.

Используя этот pcap из выборок перехвата wireshark, мы можем получить IP-адреса dest, проверяя, если слой IP существует .

# print_ips.py
from scapy.all import rdpcap

ip_list = []
pkts = rdpcap('allen_test.pcap')
# Limit analysis to 20 packets for brevity
twenty_pkts = pkts[:20]
for packet in twenty_packets:
    # This check is what you are missing
    if 'IP' in packet:
        dest_ip = packet['IP'].dst
        ip_list.append(dest_ip)

print("Out of", len(twenty_packets), "packets,", len(ip_list), "were IP packets.")
print("Dest IPs", ip_list)

Запустив это в оболочке, мы получим

$ python print_ips.py
WARNING: DNS decompression loop detected
Out of 20 packets, 7 were IP packets.
Dest IPs ['172.19.255.255', '172.19.255.255', '172.19.255.255', '172.19.255.255', '224.0.0.9', '172.19.0.240', '172.19.0.240']
...