C# sharpcap中的离线包过滤

C# sharpcap中的离线包过滤,c#,packet-capture,winpcap,sharppcap,C#,Packet Capture,Winpcap,Sharppcap,我正在尝试使用SharpPcap对.cap文件中的数据包进行脱机捕获。 我打算基于过滤器捕获这些数据包 下面是我的代码片段 private static void device_PcapOnPacketArrival(object sender, CaptureEventArgs e) { System.Console.WriteLine(e.Packet.LinkLayerType); } static void Par

我正在尝试使用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文件中的所有帧。


脱机模式下是否支持数据包过滤?如果支持,那么我的过滤器是否有问题?发现问题。在过滤时必须考虑VLAN。 当我使用“vlan和tcp”而不是“tcp”时,它可以工作。
更多信息可以在这里找到

嗨,巴里。您是否尝试过SharpPcap源代码版本中的过滤器示例?当您将它们修改为仅在tcp上进行过滤时,是否可以验证它们是否正确地为您工作?这将为我们提供一个具有已知工作代码的数据点。是的,脱机代码支持过滤。嗨,Chris,我尝试使用中的过滤器示例。只有“arp”过滤器正在处理我的捕获文件。当我尝试在标准捕获上运行这些过滤器时,它们工作正常。我觉得我的捕获文件有问题。啊,那么你的流量也被vlan标记了?有趣的是,需要vlan,但如果您希望能够在顶级vlan与非vlan tcp流量之间进行过滤,我想这是有意义的。