pcap2har для pcap, который был сгенерирован tshark(опция -w)

Мой файл pcap генерируется с помощью команды вроде:

cmd = """tshark -r "%s" -R "frame.time_relative >= %f" -w "%s" """ % (pcap_name, first_dns_query_time, normalized_pcap_name)
subprocess.Popen(cmd)

И этот нормализованный pcap вводится в pcap2har. Я получаю эту ошибку:

Traceback (most recent call last):
  File "main.py", line 65, in <module>
    dispatcher = pcap.EasyParsePcap(filename=inputfile)
  File "/path/to/pcap2har/pcap2har/pcap.py", line 80, in EasyParsePcap
    ParsePcap(dispatcher, filename=filename, reader=reader)
  File "/path/to/pcap2har/pcap2har/pcap.py", line 27, in ParsePcap
    pcap = ModifiedReader(f)
  File "/path/to/pcap2har/pcap2har/pcaputil.py", line 105, in __init__
    raise ValueError, 'invalid tcpdump header'
ValueError: invalid tcpdump header

Часть pcaputil.py это выдает ошибку:

    elif self.__fh.magic != dpkt.pcap.TCPDUMP_MAGIC:
        raise ValueError, 'invalid tcpdump header'

Для моего pcap(и для любого pcap, сгенерированного командой tshark), self.__fh.magic является 168627466 а также dpkt.pcap.TCPDUMP_MAGIC является 2712847316,

Я прокомментировал строку, которая выдает исключение в pcaputil.py но после этого я получаю это:

Traceback (most recent call last):
  File "main.py", line 65, in <module>
    dispatcher = pcap.EasyParsePcap(filename=inputfile)
  File "/path/to/pcap2har/pcap2har/pcap.py", line 80, in EasyParsePcap
    ParsePcap(dispatcher, filename=filename, reader=reader)
  File "/path/to/pcap2har/pcap2har/pcap.py", line 27, in ParsePcap
    pcap = ModifiedReader(f)
  File "/path/to/pcap2har/pcap2har/pcaputil.py", line 108, in __init__
    self.dloff = dpkt.pcap.dltoff[self.__fh.linktype]
KeyError: 4294967295L

Я уже представил вопрос на GitHub

2 ответа

Решение

Начиная с Wireshark 1.8, формат выходного файла по умолчанию - pcap-ng, а не pcap. Если pcap2har использовал одну из оболочек Python для libpcap, и вы работали в системе с libpcap 1.0 или более поздней версии (что также означает "не работает в Windows", так как нет версии WinPcap, основанной на libpcap 1.0 или более поздней версии), она автоматически сможет читать многие файлы pcap-ng, как libpcap может их читать, но, вероятно, использует собственный код для чтения файлов libpcap.

Попробуйте запустить tshark с "-F pcap", чтобы он сгенерировал файл pcap.

Вы можете использовать editcap, чтобы изменить формат файла ".pcapng":

editcap teste.pcapng teste.pcap -F pcap
Другие вопросы по тегам