Используйте netcat в качестве прокси для регистрации трафика

7515
deephacks

Я хочу использовать netcat в качестве прокси-сервера для регистрации http-запросов и ответов на файлы, а затем подключать их для проверки трафика. Думаю, проволочная акула.

Попробовал следующее, где 'fifo' - это именованный канал, 'in' и 'out' - это файлы, прокси netcat на порту 8080, сервер на порту 8081.

пока правда; сделать кошку фифо | нк-л-р 8080 | тройник в | nc localhost 8081 | тройник 1> fifo; сделанный

Проблемы:

  • Netcat перестает отвечать после первого запроса (пока цикл игнорируется?).

  • Netcat завершает работу с сообщением msg, localhost [127.0.0.1] 8081 (tproxy) : Connection refusedесли сервер недоступен на 8081. Вопрос: можно ли «лениво» подключиться к 8081, когда сделан запрос? Т.е. я не хочу, чтобы 8081 работал при запуске netcat.

4

3 ответа на вопрос

5
Oddstr13

ncat может сделать это довольно легко, используя аргумент --sh-exec.

Следующая команда позволит вам увидеть оба направления TCP-соединения в режиме реального времени и разрешит несколько соединений. Соединение с example.comвыполняется один раз для каждого полученного соединения localhost:8080.

ncat -lkv localhost 8080 -c 'tee /dev/stderr | ncat -v example.com 80 | tee /dev/stderr' 

Измените две teeкоманды на, tee -a ./fileесли вы хотите войти в файл вместо отображения его в реальном времени. Вы также можете удалить, -vчтобы отключить подробный вывод, оставив только переданные данные, напечатанные на терминале.

-k, --keep-open Accept multiple connections in listen mode -l, --listen Bind and listen for incoming connections -v, --verbose Set verbosity level (can be used several times) -c, --sh-exec <command> Executes the given command via /bin/sh 

Смотрите ncat --helpили man ncatдля более подробной информации.

2
RedGrittyBrick

Используйте socat, вам не нужны трубы и fifos

Работает хорошо. Я могу видеть ответ сейчас. Но как мне заставить socat остаться в живых для последующих запросов? Пробовал `пока правда; do socat -v tcp-listen: 8080, keepalive = 1 tcp: localhost: 8081; done` и `socat -v tcp-listen: 8080, keepalive = 1 tcp: localhost: 8081` deephacks 12 лет назад 0
Попробуйте [`fork`] (http://www.dest-unreach.org/socat/doc/socat.html#OPTION_FORK) как в` socat -v tcp-listen: 8080, fork tcp: localhost: 8081` RedGrittyBrick 12 лет назад 0
1
garyjohn

Я бы использовал tcpdump ( учебник ) для этого. Я думаю, что команда, которую вы хотите, выглядела бы так:

sudo tcpdump -i eth0 -s0 -v port 8080 
tcpdump показывает только необработанные пакеты, которые трудно читать. tcpflow делает именно то, что я хочу, и устраняет необходимость прокси-запроса / ответа. `sudo tcpflow -p -i lo -c порт 8081` deephacks 12 лет назад 2

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