我正在尝试使用SharpPcap从.cap文件中对数据包进行离线捕获。我打算基于过滤器捕获这些数据包。
下面是我的代码片段。
private static void device_PcapOnPacketArrival(object sender, CaptureEventArgs e)
{
System.Console.WriteLine(e.Packet.LinkLayerType);
}
static void ParseLogFile(string l_FileName)
{
CaptureFileReaderDevice l_Parser = new CaptureFileReaderDevice(l_FileName);
l_Parser.Open();
string l_filter = "tcp";
string ErrMsg;
PcapDevice.CheckFilter(l_filter, out ErrMsg);
l_Parser.Filter = l_filter;
System.Console.WriteLine("ErrMsg: " + ErrMsg);
//l_Parser.OnPacketArrival += device_PcapOnPacketArrival;
//l_Parser.Capture();
SharpPcap.RawCapture pac;
while ((pac = l_Parser.GetNextPacket()) != null)
{
//Prints the time and length of each received packet
System.Console.WriteLine(BitConverter.ToString(pac.Data));
}
l_Parser.Close();
}
public static void Main() {
ParseLogFile(@"Sample.cap");
System.Console.WriteLine("THE END");
}当我将过滤器设置为"tcp“时,我没有看到任何记录在控制台上的帧,但我可以在wireshark上看到它们。


相反,如果我将过滤器设置为“”,我可以看到控制台上.cap文件中的所有帧。

是否支持离线模式下的数据包过滤?如果支持,那么这里的过滤器有什么问题吗?
发布于 2017-07-17 13:25:21
发现了问题。过滤时必须考虑vlan。当我使用"vlan和tcp“而不是"tcp”时,它可以工作。更多信息可以在这里找到traffic.php。
https://stackoverflow.com/questions/45079826
复制相似问题