2012-01-23 102 views
3

到現在我一直在使用的WinPcap在C#中打開PCAP文件:我如何在C#中打開一個PCAP-NG文件

[DllImport("wpcap.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] 
private extern static IntPtr pcap_open_offline(string fname, byte[] errbuf); 

現在我想要做類似打開PCAP-NG文件這樣的東西我得到的納米第二項決議(我有一個新的嗅探器:-))

不幸的是WinPcap的失敗,此錯誤:「壞轉儲文件格式」

任何人知道如何與PCAP-NG工作在Windows?

乾杯, 佩德羅

+0

你能爲我展示更多的工作嗎?我需要閱讀一個.pcap文件並閱讀所有信息。 –

回答

5

Libpcap的1.1.x和更高版本支持閱讀一些PCAP-NG文件(那些所有接口具有相同的鏈路層頭類型和快照長度);但是,沒有基於libpcap 1.1.x或1.2.x的WinPcap版本,因此沒有可以讀取pcap-ng文件的WinPcap版本。因此,在WinPcap版本發佈之前,WinPcap周圍沒有任何CLR語言包裝器將能夠讀取pcap-ng文件。

此外,libpcap/WinPcap API當前不會以納秒分辨率返回時間戳,因此即使您使用libpcap以納秒分辨率時間戳讀取文件,也不會看到納秒分辨率時間戳。現在,你必須編寫自己的代碼,或者在Wireshark的Wiretap庫中編寫一個包裝器。 (請注意,Wiretap的API受到Wireshark主要版本之間的重大且不兼容的變化的影響。)

+0

謝謝蓋伊,那是我到達的結論。你知道他們是否經常改變Wiretap的API?我想這個時候是相當穩定的。我打算使用wtap_open_offline然後我會做我自己的解析。 (在WinPcap中同樣出色的工作,我多年來一直是一位快樂的用戶)。 –

+0

如果我有時間,我可能會在Wireshark 1.8.0中更改Wiretap的API,以更好地支持pcap-NG(以及其他一些捕獲文件格式)。我也想找時間給libpcap添加新的API以更好地處理pcap-NG;如果是這樣,希望WinPcap將更新到未來版本的libpcap。 – 2012-01-27 07:46:35

+0

那太棒了! –

0

你嘗試使用sharpPcap?如果它支持它不知道(能不能試一下現在),但它支持打開捕獲文件以及IIRC: http://sourceforge.net/apps/mediawiki/sharppcap/index.php?title=Main_Page

+0

感謝您的提示,但它不支持它。 CaptureFileReaderDevice丟掉了這個: 「無法打開離線適配器:壞轉儲文件格式」 –

+0

這不是SharpPcap的產品,但問題是您使用的libpcap/winpcap版本不支持pcap-ng格式化文件。如果api保持不變,但支持被添加到libpcap/winpcap,那麼SharpPcap將透明地獲得使用這些pcap-ng文件的能力,因爲它實際上並沒有進行任何解析本身,只是與較低級別的庫(的libpcap/winpcap的)。 –