Перезапись Живого TCP/IP (Уровень 4) (т.е. Слой Сокета) Потоки

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

Я хочу переписать Уровень 4 потоки TCP/IP (Не пакеты человека нижнего уровня или кадры.) Ettercap etterfilter команда позволяет Вам выполнить простые живые замены Уровня 4 потоки TCP/IP на основе фиксированных строк или regexes. Пример 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. Таким образом, я могу тихо отфильтровать трафик, прибывающий из любого направления без проблем NATing. Обратите внимание, что мой фильтр является приложением, которое действует как фильтр канала, подобный дизайну фильтров командной строки Unix:

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

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

О чем я уже знаю, но не подхожу:

  • Бочка/Касание - Работы над более низким пакетным уровнем, я должен работать с более высокими потоками слоя.

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

  • Сцепление в некоторое программное обеспечение VPN? - Я просто не могу выяснить который или точно как.

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

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

Спасибо!

13
задан 13 revs 6 April 2010 в 18:55
поделиться

7 ответов

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

1
ответ дан 2 December 2019 в 02:11
поделиться

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

0
ответ дан 2 December 2019 в 02:11
поделиться

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

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

например,

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

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

0
ответ дан 2 December 2019 в 02:11
поделиться

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

0
ответ дан 2 December 2019 в 02:11
поделиться

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

2
ответ дан 2 December 2019 в 02:11
поделиться

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

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

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

1
ответ дан 2 December 2019 в 02:11
поделиться

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

Для начала посмотрите на страницу etterfilter man. Поищите в исходном коде движок фильтра (очевидно, это JIT-интерпретатор).

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

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

0
ответ дан 2 December 2019 в 02:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: