У меня есть простая проблема, которую я уверен, что кто-то здесь сделал это раньше...
Я хочу переписать потоки 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), как в этом примере, вместо подхода на основе пакетов на более низком уровне. Точный код очень поможет!
Спасибо!
