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