Чтение файла PCAP с помощью scapy

У меня есть около 10 ГБ данных pcap с трафиком IPv6 для анализа информации, хранящейся в заголовке IPv6 и другом заголовке расширения. Для этого я решил использовать фреймворк Scapy. Я попробовал функцию rdpcap, но для таких больших файлов это не рекомендуется. Он пытается загрузить весь файл в память и в моем случае застревает. Я обнаружил в сети, что в такой ситуации рекомендуется sniff, мой код выглядит так:

def main():
   sniff(offline='traffic.pcap', prn=my_method,store=0)


def my_method(packet):
   packet.show()

В функции под названием my_method я получаю каждый пакет отдельно и могу анализировать их, но .... Когда я вызываю show с встроенным методом фреймворка. У меня получилось вот так: result

При открытии в wirehark я получил правильно выглядящий пакет: result2

Не могли бы вы рассказать мне, как разобрать эти пакеты в scapy, чтобы получить правильные результаты?

РЕДАКТИРОВАТЬ: Согласно обсуждению в комментариях, я нашел способ проанализировать файл PCAP с помощью Python. На мой взгляд, проще всего использовать фреймворк pyshark:

import pyshark
pcap = pyshark.FileCapture(pcap_path) ### for reading PCAP file

Можно легко перебрать прочитанный файл с помощью цикла for

for pkt in pcap:
    #do what you want

Для разбора заголовка IPv6 могут быть полезны следующие методы:

pkt['ipv6'].tclass            #Traffic class field
pkt['ipv6'].tclass_dscp       #Traffic class DSCP field
pkt['ipv6'].tclass_ecn        #Traffic class ECN field
pkt['ipv6'].flow              #Flow label field
pkt['ipv6'].plen              #Payload length field
pkt['ipv6'].nxt               #Next header field
pkt['ipv6'].hlim              #Hop limit field

person Krystian    schedule 22.03.2017    source источник
comment
@coder Я понимаю, что wirehark показывает пакет по-другому, и я согласен с этим. Но посмотрите на ip-адрес src и как он анализируется scapy - насколько я знаю, это не нормально, но, возможно, я не прав.   -  person Krystian    schedule 23.03.2017
comment
о, да, вы правы - я пропустил часть ipv6.   -  person coder    schedule 24.03.2017
comment
Например, вы можете выгрузить все source ips с помощью команды: tshark -T fields -e ip.src -r your_file.pcap или, изменив ip.src на ip.dst, вы можете проанализировать dst ips (это очень похоже на scapy). Также можно попробовать много других полей (например, frame.time, dns.qry.name, tcp.port и многие другие wireshark fields)   -  person coder    schedule 24.03.2017
comment
@coder Большое спасибо за вашу помощь. Посмотрю внимательно на tshark :)   -  person Krystian    schedule 24.03.2017
comment
Я забыл также упомянуть, что здесь также есть оболочка python tshark (pyshark): github .com / KimiNewt / pyshark.   -  person coder    schedule 24.03.2017
comment
Например, вы можете сделать: import pyshark, cap = pyshark.FileCapture('v6.pcap'), а затем for packet in cap: print packet.ipv6.src   -  person coder    schedule 24.03.2017


Ответы (1)


Обновить

Последние версии scapy теперь поддерживают ipv6 разбор. Итак, чтобы проанализировать файл ipv6 ".pcap" с помощью scapy прямо сейчас это можно сделать так:

from scapy.all import *

scapy_cap = rdpcap('file.pcap')
for packet in scapy_cap:
    print packet[IPv6].src

Теперь, когда я прокомментировал, когда этот вопрос был первоначально задан, для более старых версий scapy (которые не поддерживают синтаксический анализ ipv6):

  • Вместо этого можно использовать pyshark (pyshark - оболочка tshark) следующим образом:

import pyshark

shark_cap = pyshark.FileCapture('file.pcap')
for packet in shark_cap:
    print packet.ipv6.src
  • или даже, конечно, tshark (разновидность терминальной версии wirehark):

$ tshark -r file.pcap -q -Tfields -e ipv6.src
person coder    schedule 13.09.2017