Как анализировать / перехватывать пакеты до того, как они будут отправлены / получены операционной системой?

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

Вопрос

Мне всегда было интересно, как программные брандмауэры работают под прикрытием, и я хотел бы иметь возможность писать свои собственные пользовательские инструменты для анализа или перехвата пакетов до того, как они будут отправлены или получены операционной системой.Я достаточно хорошо знаком с основными принципами сетевого взаимодействия;Я просто понятия не имею, с чего начать, если я хочу написать программное обеспечение, которое вписывается в сетевой стек подобно тому, как это делают брандмауэры.Кто-нибудь может дать мне несколько советов?

Мне было бы особенно интересно, если бы это можно было сделать с помощью C #, но я могу работать и на других языках.Я в основном фокусируюсь на Windows, но хотел бы знать, существуют ли там также какие-либо кроссплатформенные библиотеки.

Редактировать Использование драйвера NDIS (как это делает Wireshark) звучит как хороший вариант, а возможности фильтрации пакетов Vista звучат неплохо, но как брандмауэры выполняют это, скажем, в Windows XP?Им не нужно устанавливать специальный драйвер, о котором я знаю.

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

Решение

В Windows Vista и более поздних версиях вы, возможно, захотите ознакомиться с Платформа фильтрации Windows.В более ранних версиях Windows вам необходимо использовать драйверы фильтров (на странице, связанной с MSDN, указано, какие технологии заменяет WFP).

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

Насколько я помню, это включает в себя написание драйвера NDIS.Он располагается практически поверх сетевой карты (Network Interface Card), и у вас есть абсолютный контроль над тем, что входит или выходит из сетевой карты, прежде всего над чем-либо еще - вплоть до уровня пакетов Ethernet.

Это не может быть достигнуто с помощью C #.Вам действительно нужно использовать C или C ++ для этой задачи.

Обновить:Последний раз я делал это в Windows XP days.Я вижу из другого ответа, что есть новый и, судя по всему, более простой API, если вы используете Windows Vista и далее.

Не уверен, что это "до Ввода-вывода", но взгляните на Проволочная метка и библиотека, которую он использует, libpcap ( библиотека ).

Взгляните на WinPcap - он использует драйвер NDIS для реализации своих возможностей фильтрации пакетов.Эта библиотека, вероятно, может стать отличной основой для любой программы проверки пакетов / брандмауэра, которую вы хотели бы написать, и у нее открытый исходный код.От http://www.winpcap.org/docs/docs_40_2/html/group__internals.html:

Во-первых, системе сбора данных необходимо обойти операционные системы стек протоколов, чтобы получить доступ к необработанным данным, проходящим по сети.Для этого требуется часть, работающая внутри ядра операционной системы, взаимодействующая напрямую с драйверами сетевого интерфейса.Эта часть сильно зависит от системы, и в нашем решении она реализована как драйвер устройства, называемый Netgroup Фильтр пакетов (NPF);мы предоставляем различные версии драйвера для Windows 95, Windows 98, Windows ME, Windows NT 4, Windows 2000 и Windows XP.Эти драйверы предлагают как базовые функции, такие как захват пакетов и внедрение, так и более продвинутые такие, как программируемая фильтрация система и механизм мониторинга. Первый может использоваться для ограничения сеанса захвата подмножеством сетевого трафика (напримервозможно перехватывать только трафик ftp , генерируемый конкретным хостом), второй обеспечивает мощный, но простой в использовании механизм для получения статистики трафика (напримерэто возможно для получения сетевой нагрузки или объема данных, которыми обмениваются между двумя хостами).

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