Как подключить стек TCP в Windows, чтобы анализировать и изменять пакеты? - PullRequest
10 голосов
/ 29 марта 2009

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

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

Ответы [ 7 ]

10 голосов
/ 30 марта 2009

Сделано это :-) В 2000 году моей первой программой для Windows был драйвер ловушки фильтра .

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

Неудачные пакеты на этом уровне являются КВАДРАТНЫМИ необработанными, фрагменты не собираются заново, и это больше похоже на конец «сетевой карты» (но больше не заголовки Ethernet). Так что у вас будет довольно плохое время для декодирования пакетов для фильтрации с этим решением.

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

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

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

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

1 голос
/ 29 марта 2009

C # код для этого здесь

1 голос
/ 29 марта 2009

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

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

0 голосов
/ 30 марта 2009

это:

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

http://tdifw.sourceforge.net/

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

0 голосов
/ 30 марта 2009

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

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

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

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

0 голосов
/ 29 марта 2009

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

0 голосов
/ 29 марта 2009

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

...