Извлечь все данные протоколов из PCAP с помощью Python DPKT и сохранить как CSV - PullRequest
0 голосов
/ 10 мая 2019

Команда, я хотел бы извлечь No_of_ARP_Request, No_of_TCP_SYN, Number_UDP_138, NBNS, MDNS, IGMP, ICMP data Src_MAC_Address, Dest_MAC_Address, Src_Port, Dest_Port и т. Д.Возможности из файла pcsh wireshark.
Следует сообщить, что я уже извлек функции и сохранил DPKT в виде CSV для данных ARP.может любой может иметь лучшее предложение или код для того, как извлечь все функции с помощью DPKT и сохранить как CSV.Спасибо.

def arp_analys(filename):
    with open("../data/" + filename + ".pcap", 'rb') as f:

        pcap = dpkt.pcap.Reader(f)

        requests = []
        replies = []

        for ts, buf in pcap:

            eth = dpkt.ethernet.Ethernet(buf)
            # If the packet is not arp

            if eth.type != 2054:
                continue
            try:
                arp = eth.arp
            except Exception as e:
                continue

            packet_time = datetime.datetime.utcfromtimestamp(ts).strftime("%m/%d/%Y,%H:%M:%S")

            src = dpkt.socket.inet_ntoa(arp.spa)
            tgt = dpkt.socket.inet_ntoa(arp.tpa)


            # Src and Dest MAC

            from src.arpbasic import mac_addr
            s_mac = mac_addr(eth.src)
            d_mac = mac_addr(eth.dst)

1 Ответ

0 голосов
/ 11 мая 2019

Вы можете легко извлечь объекты (поля) из дампа, используя опцию tshark -e:

-e Добавить поле в список полей для отображения, если -T ek|fields|json|pdmlвыбран.Эта опция может быть использована несколько раз в командной строке.Необходимо указать хотя бы одно поле, если выбрана опция -T fields.Имена столбцов могут использоваться с префиксом «_ws.col.»

Пример: tshark -e frame.number -e ip.addr -e udp -e _ws.col.Info

Если вместо одного поля задан протокол, то будет напечатано несколько элементов данных о протоколе как одинполе.По умолчанию поля разделены символами табуляции.-E контролирует формат печатных полей.

$ tshark -r dump -e tcp.srcport -Tjson
[
  {
    "_index": "packets-2019-04-14",
    "_type": "pcap_file",
    "_score": null,
    "_source": {
      "layers": {
        "tcp.srcport": [
          "42130"
        ]
      }
    }
  }
]

Если вы хотите выполнить некоторую постобработку с данными в python, я бы порекомендовал использовать tshark -T, а затемпарсинг этого вывода в вашем коде.

Что-то вроде pdml2frame может помочь вам в разборе.Должно быть просто написать новый плагин, который делает то, что вы хотите.

Раскрытие информации : я написал pdml2flow.

...