Мне нужно сделать небольшую модификацию входящего трафика от известного хоста tcp: порт, прежде чем процесс, обрабатывающий соединение, получит поток.
Например, пусть 192.168.1.88 будет удаленным хостом, на котором работает веб-сервер.
Мне нужно , что, когда процесс на моем локальном хосте принимает данные от 192.168.1.88:80 (например , браузера), данные сначала изменен путем замену text-A
с text-B
, как это:
- 127.0.0.1: ... подключается к 192.168.1.88:80
127.0.0.1: ... отправляет на 192.168.1.88:80:
GET /
192.168.1.88:80 отправляет на 127.0.0.1: ...:
HTTP/1.0 200 OK Content-Type: text/plain Some text-A, some other text
Эти данные несколько перехватываются системой и передаются программе, вывод которой:
HTTP/1.0 200 OK Content-Type: text/plain Some text-B, some other text
система передает измененные данные процессу, обрабатывающему 127.0.0.1: ..., как если бы он исходил из 192.168.1.88:80.
Предполагая, что у меня есть потоковый способ внести эти изменения (используя, sed
например), какой самый простой способ предварительно обработать входящий поток tcp?
Я предполагаю, что это будет связано iptables
, но я не очень хорош в этом.
Обратите внимание, что приложение должно иметь дело с исходным хостом, поэтому настройка прокси вряд ли является решением.
источник
Ответы:
Используйте netsed и iptables прокси.
Затем запустите:
NetSED - это небольшая и удобная утилита, предназначенная для изменения в реальном времени содержимого пакетов, пересылаемых через вашу сеть. Это действительно полезно для изменения сетевых пакетов, подделки или манипуляций. NetSED поддерживает:
аудит протокола черного ящика - всякий раз, когда два или более запатентованных ящика общаются с использованием какого-либо недокументированного протокола. Применив изменения в текущих передачах, вы сможете проверить, может ли проверяемое приложение быть защищенным.
эксперименты с нечеткой генерацией, тесты целостности - всякий раз, когда вы проводите тесты стабильности приложения, чтобы увидеть, как оно заботится о целостности данных;
другие распространенные сценарии использования: вводящие в заблуждение передачи, фильтрация содержимого, преобразование протоколов - все, что лучше всего подходит под вашу задачу.
источник
netsed
, это почти идеально подходит для моих целей. Единственное, что я не получаю, это как настроить «локальный прозрачный прокси» (см. Вопрос). Возможно, я должен настроить другой (виртуальный) сетевой интерфейс, чтобы получить это. Кстати, пока это самый удовлетворительный ответ.OUTPUT
, а неPREROUTING
. Кроме того,-D
вариант должен был быть-A
для меня. Кроме того, для-j
варианта, я должен был использоватьDNAT --to-destination (ip)
илиREDIRECT --to-port
. Наконец, я НЕ смог исправить ошибку сегментации netsed. см. также: ubuntuforums.org/showthread.php?t=2337389Вы можете сделать именно это, используя iptables для прозрачного прокси-соединения через прокси-сервер squid , а затем попросив squid переписать http-контент для вас.
источник
iptables
+ использование libnetfilter_qu - это еще один вариант, который будет делать то, что вы хотите:«... [повторно внедрить] измененные пакеты в подсистему ядра nfnetlink_queue.»
Скорее всего, это даст вам большую расширяемость, так как это зависит от вас, чтобы написать программное обеспечение.
Также доступна оболочка для Python .
источник