2009-09-21 4 views
3

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

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

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

ответ

5

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

+0

+1 Большое спасибо, я искал этот API с давних пор. – Searock

1

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

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

ОБНОВЛЕНИЕ: Я последний раз это сделал в Windows XP дней. Я вижу из другого ответа, что есть новый, и, по внешнему виду, более простой API, если вы используете Windows Vista и далее.

1

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

+0

Я не думаю, что libpcap может отбрасывать или изменять пакеты до их отправки. – jnylen

0

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

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

Смежные вопросы