Переписывание потоков потокового трафика TCP/IP (уровень 4) (то есть сокета)

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

Я хочу переписать потоки TCP/IP 4-го уровня (отдельные пакеты или фреймы не более низкого уровня). Команда Ettercap etterfilter позволяет выполнять простые замены в реальном времени потоками 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), как в этом примере, вместо подхода на основе пакетов на более низком уровне. Точный код очень поможет!

Спасибо!

Ответы

Ответ 1

Посмотрите Scapy или другой инструмент обработки пакетов. Там не так много этого.

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

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

например.

for (int я = 0; я < DATA.len; я ++) {   if (DATA.data [i] == 'c') {       DATA.data [i] = q   } }

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

Ответ 6

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

Ответ 7

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

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

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

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