2009-03-29 8 views
10

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

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

ответ

1

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

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

1

C# код, чтобы сделать это here

+0

Поскольку он основан сокеты , он не сможет обнюхивать входящие TCP-пакеты в Windows 7. (Microsoft искалечила сырые сокеты на несерверных версиях окон) – CodesInChaos

+0

Мне, к сожалению, нужно решение WFP. – ChopperCharles

0

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

0

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

8

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

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

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

Существует также драйвер крюка брандмауэра, как обсуждалось в этом codeproject article.

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

Update: Забыл верхушку отладочной:

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

+0

Драйверы фильтра-фильтра не являются хорошим выбором, потому что вы можете установить только один из них в любое время. Если вы попытаетесь установить систему, у которой уже есть что-то, то вы набиты. – 2009-03-29 21:49:19

+0

Согласовано. Я думаю, что драйвер перехвата брандмауэра - это путь, хотя он устарел в WinXP и выше для слишком высокой загрузки сетевого стека. NDIS рекомендуется для WinXP. NDIS, похоже, больше работает. – Eyal

0

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

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

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

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

0

это:

TdiFw простой ТДИ-Based Open Source Personal Firewall для Windows NT4/2000/XP/2003

http://tdifw.sourceforge.net/

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

+0

Если это то, что я думаю, это отстой! исходный код НЕ хорошо написан или понятен. Я посмотрел на него, когда писал свой собственный фильтр TDI, и мне это совсем не помогло. – 2009-04-23 10:44:14