2013-02-28 43 views
1

我的PCAP文件通過像命令生成,是由tshark的(-w選項)產生的PCAP:pcap2har爲

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(以及由tshark的命令產生的任何PCAP),self.__fh.magic168627466dpkt.pcap.TCPDUMP_MAGIC2712847316

我評論說,拋出異常在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 

我已經提交的問題on github

回答

2

由於Wireshark的1.8,默認的輸出文件格式是PCAP -ng,而不是pcap。如果pcap2har已經使用了libpcap的一個Python包裝器,並且您正在運行libpcap 1.0或更高版本的系統(這也意味着「不在Windows上運行」,因爲沒有基於libpcap 1.0或更高版本的WinPcap版本),它會自動讀取許多pcap-ng文件,因爲libpcap可以讀取它們,但它可能使用自己的代碼來讀取libpcap文件。

嘗試使用「-F pcap」運行tshark以使其生成pcap文件。

+0

PCAP不是tshark的有效選項。這些是:http://pastebin.com/hzU2Sj0Y – zengr 2013-07-28 06:34:44

1

您可以使用editcap改變「.pcapng」文件的格式:

editcap teste.pcapng teste.pcap -F pcap