SharpPcap中的离线数据包过滤

时间:2017-07-13 11:52:17

标签: c# packet-capture winpcap sharppcap

我正在尝试使用 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上看到它们。 WireShark display Console output with tcp filter

相反,如果我将过滤器设置为" "我可以在控制台上看到.cap文件中的所有帧。 Console output for no filter

离线模式是否支持包过滤?如果支持,那么我的过滤器在这里有什么问题吗?

1 个答案:

答案 0 :(得分:0)

发现了这个问题。不得不在过滤时考虑vlan。 当我使用“vlan和tcp”而不是“tcp”时,它可以工作。 更多信息可以在http://www.christian-rossow.de/articles/tcpdump_filter_mixed_tagged_and_untagged_VLAN_traffic.php

找到