Фильтровать по 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
Если считать, что страница в Руководстве пользователя 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
выдавать исключение для недопустимого выражения фильтра или нет.