Мне нужно внести небольшие изменения во входящий трафик от известного tcp host: port до того, как процесс, обрабатывающий соединение, получит поток.
Например, пусть 192.168.1.88 будет удаленным хостом, на котором работает веб-сервер.
Мне нужно это, когда процесс на моем локальном хосте получает данные из 192.168.1.88:80 (например, браузер), данные сначала изменяются, заменяя text-A
с участием text-B
, как это:
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.
iptables -t nat -D PREROUTING -s yourhost -d desthost -p tcp --dport 80 -j REDIRECT --to 10101
Затем запустите:
netsed tcp 10101 desthost 80 s/text-A/text-B
NetSED это небольшая и удобная утилита, предназначенная для изменения в реальном времени содержимого пакетов, пересылаемых через вашу сеть. Это действительно полезно для изменения, подделки или обработки сетевых пакетов. NetSED поддерживает:
аудит протокола черного ящика - когда есть два или более проприетарных ящика, обменивающихся данными с использованием какого-либо недокументированного протокола. Принудительно внося изменения в текущие передачи, вы сможете проверить, можно ли считать проверяемое приложение защищенным.
эксперименты по генерации нечетких сигналов, тесты целостности - всякий раз, когда вы проводите тесты стабильности приложения, чтобы увидеть, как оно заботится о целостности данных;
другие распространенные варианты использования: ложная передача, фильтрация контента, преобразование протокола - все, что лучше всего подходит для вашей задачи.
Вы можете сделать именно это, используя iptables для прозрачные прокси-соединения через прокси-сервер Squid, а затем имея squid переписывает http-контент для тебя.
iptables
+ использование libnetfilter_qu еще один вариант, который сделает то, что вы хотите:
"... [повторно внедрить] измененные пакеты в подсистему ядра nfnetlink_queue."
Скорее всего, это даст вам наибольшую расширяемость, поскольку код программного обеспечения зависит от вас.
Есть оболочка python также доступны.