Как подключить стек 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/
может помочь вам