C # - Как понюхать пакеты в приложении, не полагаясь на WinPCAP?

StackOverflow https://stackoverflow.com/questions/3485768

Вопрос

ФОН: Теперь я понимаю, как написать приложение C #, которое может контролировать пакеты, идущие в / из сетевой карты на ПК, на котором работает приложение. Подход, который я знаю, зависит от http://www.winpcap.org/ Однако уже устанавливается на ПК, а затем я использую обертку C #, например, http://pcapdotnet.codeplex.com/ или http://sourceforge.net/projects/sharppcap/ .

ВОПРОС: Мой вопрос, однако, что бы мне нужно было сделать, чтобы иметь возможность иметь приложение C #, которое может понюхать пакеты, которые не требуют предварительного установки приложения / драйверов на 3-й стороне?

Разъяснение: То есть я действительно хочу, чтобы приложение, которое у меня в настоящее время имело, но без каких-либо требований для меня, чтобы сообщить пользователю, чтобы пользователю нужно было пойти и загрузить / установить XYZ перед использованием приложения. С целью вопроса предположим, что автоматизация загрузки и установки приложения / драйверов 3-го вечеринки также не допускается. (С помощью WinPCAP я не уверен, что сможешь подключить его, однако я верю, что вы не должны в любом случае, к сожалению)

спасибо

Это было полезно?

Решение

Лично я бы придерживался WinPCAP. Но поскольку вы спросили, можно понюхать пакеты из сети, используя следующий код, чтобы включить необработанные розетки.

Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
s.Bind(new IPEndPoint(IPAddress.Parse("<IP Address Here of NIC to sniff>"), 0));
s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1);
byte[] inBytes = new byte[] { 1, 0, 0, 0 };
byte[] outBytes = new byte[] { 0, 0, 0, 0 };
s.IOControl(IOControlCode.ReceiveAll, inBytes, outBytes);

Как только это сделано, вы можете использовать Socket.Receive или Socket.BeginReceive читать сырые IP-пакеты.

Другие советы

Существует способ захватить входящие / исходящие пакеты на .NET, используя только стандартную реализацию Winsocks. Я видел блог на примере того, как у меня больше нет ссылки.

Короче говоря, это крайний край крайний край, потому что это не то, что Winsocks (стандартный сетевой драйвер Windows) предназначен для.

Причина PCAP обычно необходима для захвата пакетов, он использует свой собственный драйвер сети NDIS, который разблокирует полные возможности вашего NIC. Кроме того, он также обеспечивает простой способ установки фильтров для ограничения количества пакетов, подлежащих захваченным на указанном интерфейсе.

Т.е. водитель будет игнорировать пакеты определенного типа на уровне ядра вместо уровня USERMODE. Следовательно, вы сможете фильтровать пакеты намного более эффективно и захватывать под большие нагрузки в сети.

В .NET, для фильтрации пакетов, вам нужно было обеспечить собственную схему фильтрации пакетов приложений, которая была бы намного менее эффективной.

Windows блокирует доступ к нестандартным протоколам для «соображений безопасности», поэтому они на самом деле не поддерживают использование необработанных пакетов для сети (даже если код может существовать, чтобы сделать это возможным). Сырые пакеты всегда были предназначены для исследования дизайна новых протоколов, а не общего пользования.

Для всех этих причин, как правило, хорошая идея забрать WinPCAP и обертку для вашего конкретного языка для реализации любого типа захвата приложения.

Примечание. Я лично предпочитаю SharthPCAP, но я также предвзятый, как я делаю разработку в проекте. PCAP.NET очень похож в его реализации, когда речь идет о захвате, он в основном расходится к тому, как речь идет о том, как пакеты проанализированы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top