Вопрос

Я собираюсь написать небольшую программу, которая будет перехватывать сетевые пакеты (на локальном компьютере) и изменять их, прежде чем они попадут в сеть.Мне также нужно иметь возможность изменять заголовки, а не только данные.

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

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

В идеале мне бы хотелось, чтобы программа была автономной и не зависела от установки сторонних драйверов/программного обеспечения/чего-то еще.

Так что, если вы, люди, могли бы указать мне правильное направление, кинуть мне несколько полезных ссылок, что угодно, я был бы признателен.

Это было полезно?

Решение

Зависит от того, какие пакеты вы хотите фильтровать/изменять.

Если вам нужна фильтрация на уровне приложения и вы хотите получить доступ к HTTP или аналогичным пакетам, лучшим выбором, вероятно, будет LSP.Однако обратите внимание, что этот путь имеет определенные недостатки.Сначала MS, кажется, пытается избавиться от этой технологии, а IIRC часть требований к логотипу Windows 7 гласит: «В вашем продукте нет LSP», они, похоже, продвигают Платформа фильтрации Windows.Во-вторых, вы будете очень удивлены тем, сколько проблем у вас возникнет с точки зрения совместимости сторонних LSP.В-третьих, очень пустышка ЛСП все еще в районе 2 КЛОК :)

Если вам нужна фильтрация пакетов на уровне IP, вам понадобится драйвер.

Платформа фильтрации Windows предоставляет вам функциональность, необходимую в любом случае.Однако он доступен только в Windows Vista и более поздних версиях, поэтому XP там нет.Еще одна вещь, которую следует принять во внимание: WFP способна разрешать/отклонять пакеты только на уровне пользователя, и если вам нужно их изменить, вам нужно будет перейти в режим ядра.(По крайней мере, такова была ситуация на момент появления, возможно, к настоящему времени они что-то улучшили).

Другие советы

ИМХО, если вы хотите изменить пакеты, вам понадобится что-то для связи с оборудованием, какой-нибудь драйвер.Если вы не хотите использовать свой собственный, вам следует использовать сторонний драйвер для взаимодействия.

Для фильтрации есть такие библиотеки, как:winpcap или libpcap.

Также посмотрите здесь: http://www.ntkernel.com/w&p.php?id=7

Другая ссылка: http://bittwist.sourceforge.net/

Надеюсь это поможет!

Winpcap может фильтровать пакеты только с предварительно скомпилированными условиями.Что вам нужно, так это написать сетевой драйвер уровня LSP.Вам не придется перезагружаться каждый раз при переустановке, но он действительно может изменять пакеты до того, как они пойдут в сеть.Дополнительная информация здесь: http://blogs.msdn.com/wndp/archive/2006/02/09/529031.aspx или здесь: http://www.microsoft.com/msj/0599/LayeredService/LayeredService.aspx

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

  1. ARP отравляет хост и маршрутизатор, поэтому через мою прослушивающую машину проходили все пакеты.
  2. Проанализируйте пакеты, которые я захочу изменить в будущем, и найдите уникальные характеристики этих пакетов, чтобы я мог перехватить только их.
  3. Напишите макрос/скрипт, который искал указанную характеристику в режиме реального времени, а затем изменял ее на лету, прежде чем отправить в путь.

Я знаю, что Cain&Abel для Windows способен (ха-ха) отравить ARP, но я не уверен, сможет ли он предоставить необработанный дамп содержимого пакета.Wireshark может сбросить все, но не уверен, может ли он отравить ARP, чтобы просто получить то, что мне нужно, если нет, то я могу легко подключить хост, который я хочу перехватить, к моей машине-сниферу через Ethernet, а затем поделиться Интернетом через анализатор, чтобы все пакеты в любом случае проходили через анализатор.

Итак, шаг 1 может быть выполнен. Я не знаю, есть ли в указанных программах возможность фильтровать на основе конкретных данных, но я предполагаю, что они это делают.

Это все, что я могу сказать.Надеюсь, это кому-то поможет, и, может быть, кто-то еще сможет пойти дальше?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top