Модификация сетевых пакетов Windows
-
22-09-2019 - |
Вопрос
Я собираюсь написать небольшую программу, которая будет перехватывать сетевые пакеты (на локальном компьютере) и изменять их, прежде чем они попадут в сеть.Мне также нужно иметь возможность изменять заголовки, а не только данные.
Я уже рассмотрел несколько вариантов, но не уверен, какой из них лучше использовать.Существуют фильтры пакетов с открытым исходным кодом, но кажется, что фильтрация может только разрешать или отклонять пакеты, и не более того.
Другим решением было бы написать промежуточный драйвер 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-адреса и изменять их, прежде чем они попадут на мой маршрутизатор, а затем в Интернет.Я также хочу перехватить и изменить возвращаемые пакеты, прежде чем пропустить их на мой хост.Метод, который я предполагал, был примерно таким...
- ARP отравляет хост и маршрутизатор, поэтому через мою прослушивающую машину проходили все пакеты.
- Проанализируйте пакеты, которые я захочу изменить в будущем, и найдите уникальные характеристики этих пакетов, чтобы я мог перехватить только их.
- Напишите макрос/скрипт, который искал указанную характеристику в режиме реального времени, а затем изменял ее на лету, прежде чем отправить в путь.
Я знаю, что Cain&Abel для Windows способен (ха-ха) отравить ARP, но я не уверен, сможет ли он предоставить необработанный дамп содержимого пакета.Wireshark может сбросить все, но не уверен, может ли он отравить ARP, чтобы просто получить то, что мне нужно, если нет, то я могу легко подключить хост, который я хочу перехватить, к моей машине-сниферу через Ethernet, а затем поделиться Интернетом через анализатор, чтобы все пакеты в любом случае проходили через анализатор.
Итак, шаг 1 может быть выполнен. Я не знаю, есть ли в указанных программах возможность фильтровать на основе конкретных данных, но я предполагаю, что они это делают.
Это все, что я могу сказать.Надеюсь, это кому-то поможет, и, может быть, кто-то еще сможет пойти дальше?