【发布时间】:2014-08-15 03:15:18
【问题描述】:
我正在为 WinPcap 使用 Sharppcap 包装器,并且我试图在程序/程序生命周期的一个实例中连续读取多个 pcap 文件
foreach (FILENAME in LIST) // pseudocode
{
ICaptureDevice device;
try
{
device = new SharpPcap.LibPcap.CaptureFileReaderDevice(FILENAME);
device.Open();
}
catch (Exception e){}
while ((device.GetNextPacket()) != null)
{
// Handle Packet from FILENAME
}
device.Close()
}
它遍历第一个文件没问题,但是一旦它尝试解析第二个文件,它就会抛出一个 AccessViolationException。
我知道我可以为 1 个 pcap 文件创建一个该程序的实例,但我真的很想在一个程序中处理所有文件。有什么想法吗?
【问题讨论】:
-
您正在检查
new SharpPcap.LibPcap.CaptureFileReaderDevice(FILENAME)是否成功,对吧?不要以为它会成功。 -
是的。我确实在 catch 块中有一些东西。我只是想简化代码。无论如何,我已经解决了我的问题。不幸的是,大约 5 个小时后,我无法添加自己的答案。 (这与问题无关,而是我的 pcap 文件有问题)
-
由于打开失败和异常处理程序未退出(因此它试图从未打开的
CaptureFileReaderDevice读取)导致的崩溃也是如此,在这种情况下,代码是错误的,或者是由于 SharpPcap 存在错误(在这种情况下您应该向其开发人员报告)导致崩溃,或者是由于 SharpPcap 可能使用的 libpcap 存在错误(在这种情况下您应该report that to its developers)? -
我相信是前者。
-
也就是说,这是您的代码中的一个错误,没有正确处理打开的故障。
标签: c# winpcap sharppcap packetdotnet