Как анализировать / перехватывать пакеты, прежде чем они будут отправлены / получены ОС? - PullRequest
3 голосов
/ 22 сентября 2009

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

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

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

Ответы [ 4 ]

5 голосов
/ 22 сентября 2009

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

1 голос
/ 22 сентября 2009

Не уверен, что это "до O / S", но взгляните на WireShark и используемую библиотеку libpcap .

1 голос
/ 22 сентября 2009

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

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

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

0 голосов
/ 22 сентября 2009

Взгляните на 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 генерируется конкретным хостом), то второй обеспечивает мощный, но простой в использовании механизм для получения статистика по трафику (например, это можно получить нагрузку на сеть или количество данных, которыми обмениваются между два хозяина).

...