2010-01-03 2 views
4

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

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

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

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

Итак, если вы, люди, можете указать мне в правильном направлении, бросьте полезные ссылки по-моему, независимо от того, я бы это оценил.

ответ

4

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

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

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

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

2

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

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

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

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

Надеется, что это помогает!

2

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

+1

LSP - не водитель, это скромная пользовательская DLL. – Dmitry

2

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

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

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

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

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

Смежные вопросы