Извлечь время из файла PCAP и сохранить как файл CSV - PullRequest
0 голосов
/ 14 апреля 2019

Я хотел бы извлечь время даты из файлов PCAP только для пакетов ARP и хотел бы сохранить как csv / txt.Я использовал приведенный ниже код для извлечения времени.Команда печати работает нормально со временем.но когда его сохраняют в CSV-файле, его можно сохранить только в одну дату и один раз (например, 14:59:58) в CSV-файл.Может ли кто-нибудь предложить изменить коды для извлечения времени ARP из pcap и сохранить в CSV ПРАВИЛЬНО.Спасибо.

с открытым ("../ data /" + filename + ".pcap", 'rb') как 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

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

        if arp.op == 2:
            count_duplication(replies, src, tgt)

        elif arp.op == 1:
            count_duplication(requests, src, tgt)


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

        print (packet_time)

  save_packets(sorted(requests, key=lambda x: -x[2]), '../tmp/count-requests-xyz' + '.csv', packet_time)

# Save Packets

def save_packets (пакеты, имя файла, tcp, ts, deg_sorted): с открытым (имя файла, 'w') как f: для пакета в пакетах: data = '' для элемента в пакете: data = data + str (item) + ',' f.write (data + tcp + datetime.datetime.utcfromtimestamp (ts) .strftime ("% m /% d /% Y,% H:% M:% S") + степень_сортировки + '\ n«)

1 Ответ

0 голосов
/ 14 апреля 2019
import socket
import datetime
import dpkt


def _inet_to_str(inet):
    try:
        return socket.inet_ntop(socket.AF_INET, inet)
    except ValueError:
        return socket.inet_ntop(socket.AF_INET6, inet)


def arp(pcap_path):
    def _is_arp(packet):
        return True

    with open(pcap_path, 'rb') as f:
        pcap = dpkt.pcap.Reader(f)
        for ts, buf in pcap:
            eth = dpkt.ethernet.Ethernet(buf)
            if not isinstance(eth.data, dpkt.ip.IP):
                continue

            if not _is_arp(eth):
                continue
            ip = eth.data
            # write to file instead of printing
            print('{},{},{}'.format(_inet_to_str(ip.src), _inet_to_str(ip.dst),
                                    datetime.datetime.utcfromtimestamp(ts).strftime("%m/%d/%Y, %H:%M:%S")))
...