Как подключить стек TCP в Windows, чтобы обнюхивать и изменять пакеты?

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

Я немного читал о WinPcap, но в документации утверждается, что вы не можете использовать WinPcap для создания брандмауэра, потому что он не может отбрасывать пакеты. Какие инструменты помогут мне написать это программное обеспечение?

Ответ 1

Был там, сделал это:-) Еще в 2000 году моя первая программа для Windows когда-либо была драйвером фильтра обложек.

То, что я сделал, - это внедрение драйвера привязки фильтра и запись приложения пользовательского пространства, которое подготовило таблицу фильтров о том, что разрешить и что запретить. Когда вы обходите свой первоначальный набор синих экранов (см. Ниже мой отладочный совет в режиме ядра), драйвер режима фильтра довольно прост в использовании... он дает каждому пакету функцию, которую вы написали, и в зависимости от кода возврата ее бросает или пропускает его.

Unfortunatley пакеты на этом уровне являются QUITE raw, фрагменты не собираются повторно, и это больше похоже на конец "сетевой карты" (но больше нет заголовков Ethernet). Таким образом, у вас будет довольно плохое время для декодирования пакетов для фильтрации с помощью этого решения.

Также существует драйвер крюка брандмауэра, как описано в этой статье codeproject.

Если вы находитесь в Vista или Server 2008, вам лучше взглянуть на WFP (Windows Filtering Platform) вместо этого, похоже, утвержденный API дня для написания брандмауэров. Я не знаю об этом, кроме того, что google задумал его несколько минут назад, когда я искал Google для драйвера фильтра.

Обновление: Забыл отзыв отладки:

Sysinternals DbgView отображает вывод DbgPrint в режиме ядра и, что более важно, он также может читать их из файла дампа, который был создан на вашем последнем синем экране. Так что посыпайте свой код dbgprint, и если bluescreens просто загрузит дамп в dbgview, чтобы увидеть, что произошло до его смерти... ОЧЕНЬ полезно. Используя это, мне удалось без отладчика ядра.

Ответ 2

Я уверен, что вам нужно будет написать драйвер фильтра. http://en.wikipedia.org/wiki/Filter_driver Я не знаю гораздо больше.:). Это, безусловно, будет C/С++ Win32-приложение, и вы, вероятно, будете работать с некоторыми ядрами. Начните с загрузки DDK и поиска некоторых драйверов фильтра выборки.

Если вы просто хотите отслеживать, что происходит и выходит из IIS, рассмотрите фильтр ISAPI. Тем не менее C/С++ в Win32, но относительно проще, чем писать драйвер устройства.

Ответ 3

Код С# для этого здесь

Ответ 4

Я действительно сделал это несколько лет назад. На данный момент я неясен в деталях, но мне пришлось разработать фильтр/pass-thru/промежуточный драйвер, используя Windows DDK. Я получил много хорошей информации от pcausa. Вот URL, который указывает на их продукт, который делает это: http://www.pcausa.com/pcasim/Default.htm

Ответ 5

Если вы делаете это по практическим соображениям, а не просто для удовольствия, то вы должны взглянуть на Microsoft Network Monitor. Домашняя страница рассказывает о бета-версии версии 3.3, но вы можете загрузить версию 3.2 со страницы загрузки. Существует также SDK для NM и возможность писать парсеры для ваших собственных сетевых протоколов.

Ответ 6

Есть вопрос, который вам нужно задать, которого вы не знаете, что вам нужно спросить; вы хотите знать, к каким приложениям относятся? или вы счастливы, что ограничены IP-портом для подключения к сети?

Если вы хотите знать приложения, вам нужно написать драйвер фильтра TDI, но это делает обработку приема почти невозможной, поскольку вы не можете заблокировать путь приема.

Если вы довольны IP: портом, заходите на уровень NDIS, и я считаю, что вы можете заблокировать получение контента вашего сердца.

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

Ответ 7

TdiFw - простой личный брандмауэр с открытым исходным кодом на базе TDI для Windows NT4/2000/XP/2003

http://tdifw.sourceforge.net/

может помочь вам