Перезапись живых потоков TCP / IP (уровень 4) (т.е. сокета) - PullRequest
13 голосов
/ 02 апреля 2010

У меня есть простая проблема, которую, я уверен, кто-то здесь делал раньше ...

Я хочу переписать потоки TCP / IP уровня 4 (не отдельные пакеты или кадры нижнего уровня). Команда etterfilter Ettercap позволяет выполнять простую оперативную замену потоков TCP / IP уровня 4 на основе фиксированных строк или регулярных выражений. Пример кода сценария ettercap:

 if (ip.proto == TCP && tcp.dst == 80) {
    if (search(DATA.data, "gzip")) {
       replace("gzip", "    ");
       msg("whited out gzip\n");
    }
 }

 if (ip.proto == TCP && tcp.dst == 80) {
    if (search(DATA.data, "deflate")) {
       replace("deflate", "       "); 
       msg("whited out deflate\n");
    }
 } 

http://ettercap.sourceforge.net/forum/viewtopic.php?t=2833

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

Я хотел бы иметь конфигурацию, аналогичную конфигурации тихого мостового перехвата ettercap между двумя интерфейсами Ethernet. Таким образом, я могу тихо фильтровать трафик, поступающий с любого направления без проблем с NAT. Обратите внимание, что мой фильтр - это приложение, которое действует как конвейерный фильтр, аналогично дизайну фильтров командной строки unix:

 >[eth0] <----------> [my filter] <----------> [eth1]<

Мой фильтр будет функцией Python в пользовательском пространстве.

То, что я уже знаю, но не подходит:

  • Tun / Tap - работает на нижнем уровне пакетов, мне нужно работать с потоками более высокого уровня.

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

  • Подключиться к некоторому программному обеспечению VPN? - Я просто не могу понять, что или как именно.

  • libnetfilter_queue - Работает с пакетами нижнего уровня, а не с потоками TCP / IP.

Опять же, перезапись должна происходить на транспортном уровне (уровень 4), как это происходит в этом примере, а не на основе пакетного подхода более низкого уровня. Точный код поможет безмерно!

Спасибо!

Ответы [ 7 ]

2 голосов
/ 09 апреля 2010

Взгляните на Scapy или другой инструмент для создания пакетов. Там не так много такого типа.

1 голос
/ 13 апреля 2010

В то время я писал инструмент анализа сетевого трафика с использованием libpcap для захвата и libnids для сборки потока.

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

Если вам нужен python, pynids , кажется, делает то, что вам нужно, но у меня нет опыта работы с ним.

1 голос
/ 02 апреля 2010

Ettercap, похоже, является проектом с открытым исходным кодом, поскольку он размещен на SourceForge. Возможно, вам стоит посмотреть, как это происходит.

0 голосов
/ 07 апреля 2010

Поскольку Ettercap является открытым исходным кодом, вы можете изменить его исходный код, чтобы сделать то, что вы хотите.Выполнение собственного кода C для перезаписи потока TCP должно быть относительно простым.Тяжелая работа уже сделана.

Чтобы начать, загляните на справочную страницу etterfilter .Поиск в исходном коде для механизма фильтрации (по-видимому, это интерпретатор JIT).

Я бы также попытался отправить этот вопрос авторам etterfilter, возможно, им нравится stackoverflow: -)

Примечание: использовать Python вместо C, см. http://docs.python.org/release/2.5.2/ext/embedding.html

0 голосов
/ 02 апреля 2010

PyPCAP стоит проверить, так как все это зависит от libpcap внизу с самого начала. Вырежьте среднего человека!

0 голосов
/ 02 апреля 2010

Почему бы просто не получить доступ к DATA.data напрямую с любыми фильтрами?

Я не думаю, что вам нужно использовать search (), вам просто нужно построить собственный анализатор / конечный автомат.

, например

для (int i = 0; i Заключительные мысли; (1) Я не знаю, что DATA.len существует, но, похоже, что-то есть. (2) Я знаю, что я повторил ваш поиск / замену, но хотел показать, как вы можете сделать эквивалент. 'вручную'. Вы можете получить модные вещи позже. (3) Если вы должны были отрегулировать длину пакета (или даже содержимое в этом отношении), вам, вероятно, следует рассмотреть возможность изменения размеров окна / проверки CRC и т. Д. например DATA.data [i] = "cc" перезапишет два символа (возможно, не то, что вы хотите) или изменит сторону пакета. Я предполагаю, что есть некоторые библиотечные вызовы, чтобы снова все исправить.

0 голосов
/ 02 апреля 2010

Похоже, вы сможете написать плагин ettercap, который загружает фильтры, написанные на python. Или вместо этого напишите свой собственный фильтр на языке C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...