BerkeleyPacketFilter,通过TCP和端口进行过滤

本文关键字:过滤 通过 TCP BerkeleyPacketFilter | 更新日期: 2023-09-27 18:20:38

使用BerkeleyPacketFilter通过TCP和端口进行过滤

从Pcap.net转换教程中的代码时遇到问题。需要能够通过TCP过滤数据包并插入端口值。我无法理解BerkeleyPackageFilter语法。

        //choose port
        Console.WriteLine("Choose port nr");
        string portnr = Console.ReadLine();
        int port = Int32.Parse(portnr);

        // Compile the filter
        using (BerkeleyPacketFilter filter = communicator.CreateFilter(port))
        {
            // Set the filter
            communicator.SetFilter(filter);

通信器内部的语法是什么。CreateFilter(如何插入int端口):我还做了以下工作:

       IpV4Datagram ip = packet.Ethernet.IpV4;
       TcpDatagram tcp = ip.Tcp;

这与PcapDotNet.Packets.Transport.TransportDatagram 有关

BerkeleyPacketFilter,通过TCP和端口进行过滤

如果《Pcap.Net用户指南》中的页面给出了如何使用BerkeleyPackageFilter类的示例,那么CreateFilter方法确实NOT将整数作为参数,它将字符串作为参数。

这并不奇怪,因为用于处理数据包筛选器的底层libpcap/WinPCAP API的文档显示pcap_compile()将字符串作为参数,并且筛选器格式的文档指示筛选器是字符串。

如果您想要一个与给定TCP端口号匹配的字符串,该字符串为"TCP portN",其中N是端口号。您必须获取port,将其转换为字符串,并将其与字符串"tcp port"连接(在"port"后面加上空白),或者仅将portnr字符串与"tcp端口"连接。

请注意,您还必须NEVER假设communicator.CreateFilter()将成功。我没有看到任何关于Pcap.Net的在线文档,所以我不知道CreateFilter方法是否会为无效的筛选器表达式抛出异常。