Проверьте, содержит ли пакет уровень Ethe rnet или пакет Raw IP, используя DPKT python - PullRequest
0 голосов
/ 29 мая 2020

У меня есть несколько файлов pcap, из которых мне нужно извлечь некоторую информацию, эти пакеты смешаны, некоторые из них являются Raw IP, а другие содержат rnet кадры. пакета перед синтаксическим анализом, поскольку пакеты с кадрами ethe rnet могут быть проанализированы с помощью:

for ts, buf in pkts:
    if buf contains_ethernet:
        eth = dpkt.ethernet.Ethernet(buf)
        if eth.type == dpkt.ethernet.ETH_TYPE_IP:
            ip = eth.data
        else:
            continue
    else:
        ip = dpkt.ip.IP(buf)

Как я могу определить contains_ethernet как логическое значение или условие?

1 Ответ

1 голос
/ 29 мая 2020

Заголовочный файл pcap определяет тип ссылки захвата (например, rnet, Raw IP, ...)

Перед обработкой пакета вы должны использовать datalink () вашего dpkt.pcap. Reader (), чтобы получить тип ссылки вашего файла pcap. Согласно вашему примеру скрипта:

if <<dpkt.pcap.Reader>>.datalink() == LINKTYPE_ETHERNET: ## Process Ethernet frame elif <<dpkt.pcap.Reader>>.datalink() == LINKTYPE_RAW: ## Processs Raw IP datagram else: ## Other link types

Вот список типов ссылок: http://www.tcpdump.org/linktypes.html

Со значениями LINKTYPE_ETHE RNET для Ethe rnet и LINKTYPE_RAW для Raw IP

...