BerkeleyPacketFilter, фильтр по TCP и порту

1

Фильтровать по TCP и порту, используя BerkeleyPacketFilter

Проблема с преобразованием кода в учебник из Pcap.net. Необходимо иметь возможность фильтровать пакеты по TCP и вставлять значение порта. Я не могу понять синтаксис BerkeleyPacketFilter.

        //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

Теги:
tcp
port
packet-sniffers
packet-capture

1 ответ

0
Лучший ответ

Если считать, что страница в Руководстве пользователя Pcap.Net, дающая пример того, как использовать класс BerkeleyPacketFilter, метод CreateFilter НЕ принимает целое число в качестве аргумента, оно принимает строку в качестве аргумента.

Это не должно удивлять, учитывая, что документация для базового API libpcap/WinPCAP для обработки фильтров пакетов показывает, что pcap_compile() принимает строку в качестве аргумента и что документация для формата фильтров указывает, что фильтр является строкой.

Если вам нужна строка, соответствующая указанному номеру порта TCP, строка будет "tcp port N", где N - номер порта. Вам нужно либо взять port, преобразовать его в строку и объединить его со строкой "tcp port" (в комплекте с пробелом после "port"), либо просто конкатенать строку portnr с "tcp port".

Обратите внимание, что вы также НИКОГДА не предполагаете, что communicator.CreateFilter() будет успешным. Я не вижу онлайн-документации для Pcap.Net, поэтому я не знаю, будет ли метод CreateFilter выдавать исключение для недопустимого выражения фильтра или нет.

  • 0
    Спасибо! Есть ли другой путь, вместо коммуникатора. CreateFilter ()? Еще один способ фильтрации с ip, tcp и port? в C #

Ещё вопросы

Сообщество Overcoder
Наверх
Меню