如何在C#中打开一个pcap-ng文件

4

迄今为止,我一直在使用WinPcap来在C#中打开pcap文件:

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

现在我想要做类似于打开pcap-ng文件的操作,这样可以获取纳秒级的分辨率(我买了一个新的嗅探器 :-) )。

不幸的是WinPcap会出现以下错误:“坏的转储文件格式”。

有人知道如何在Windows中使用pcap-ng吗?

谢谢, Pedro


你能展示更多的工作给我看吗?我需要读取一个 .pcap 文件并获取所有的信息。 - Nicke Manarin
3个回答

6
Libpcap 1.1.x及更高版本支持读取某些pcap-ng文件(其中所有接口具有相同的链路层头类型和快照长度); 然而,没有基于libpcap 1.1.x或1.2.x的WinPcap版本,因此没有WinPcap版本可以读取pcap-ng文件。因此,在出现这样的WinPcap版本之前,任何围绕WinPcap的CLR语言包装器都无法读取pcap-ng文件。
此外,libpcap / WinPcap API目前不返回纳秒分辨率的时间戳,因此即使您使用libpcap读取具有纳秒分辨率时间戳的文件,也看不到纳秒分辨率时间戳。
目前,您必须编写自己的代码或编写围绕Wireshark的Wiretap库的包装器。(请注意,Wiretap的API会因Wireshark主要版本之间的重大和不兼容更改而发生变化。)

谢谢,伙计。那就是我得出的结论。你知道他们是否经常更改Wiretap的API吗?我想现在应该相当稳定了。我打算使用wtap_open_offline,然后自己进行解析。(还有,在WinPcap方面做得非常好,我已经是快乐的用户多年了)。 - pedro.lupin
如果有时间的话,我可能会在Wireshark 1.8.0中相当大程度地改变Wiretap的API,以更好地支持pcap-NG(和一些其他捕获文件格式)。 我还想找到时间向libpcap添加新的API,以更好地处理pcap-NG; 如果成功,希望WinPcap将被更新为该未来版本的libpcap。 - user862787

4

0

感谢您的提示,但它不支持此功能。 CaptureFileReaderDevice 抛出了以下错误: "无法打开离线适配器:错误的转储文件格式" - pedro.lupin
这不是SharpPcap的产品问题,问题在于您使用的libpcap/winpcap版本尚不支持pcap-ng格式文件。如果API保持不变但是libpcap/winpcap添加了对其的支持,则SharpPcap将通过与底层库(libpcap/winpcap)进行接口而透明地获得使用这些pcap-ng文件的能力,因为实际上它并没有执行任何解析操作。 - Chris Morgan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接