Использование netcat (nc) в качестве прокси-сервера HTTP и монитора - PullRequest
16 голосов
/ 29 октября 2010

Можно ли использовать программу Unix netcat (nc) для создания прокси-сервера TCP и мониторинга? Я хотел бы, чтобы весь TCP-трафик передавался через канал, а также отправлялся на стандартный вывод для мониторинга. Обратите внимание, что это будет использоваться для мониторинга трафика HTTP между аппаратным устройством и сервером HTTP.

Ответы [ 5 ]

16 голосов
/ 23 февраля 2012

Только вчера было нужно. Вы можете найти ответ здесь (по-французски): http://www.linux -france.org / ~ mdecore / linux / doc / memo2 / node168.html

mknod backpipe p
nc -l -p 80 < backpipe | tee -a in | nc localhost 8080 | tee -a out.html > backpipe

Это прослушивает порт 80 и перенаправляет на порт 8080. Входящий трафик будет присутствовать в файле in, исходящий трафик в файле out.html. Именованный канал необходим для двунаправленного соединения. 1009 *

3 голосов
/ 29 октября 2010

Не netcat сам по себе, так как он должен интерпретировать HTTP-запрос и передать его дальше.Например, HTTP-запрос через прокси-сервер начинается с:

GET http://www.example.org/ HTTP / 1.1

, который ваш прокси-сервер должен затем отправлять:.org и GET /'.

Теперь это может быть сделано путем передачи вывода nc в скрипт, который анализирует HTTP-запрос и затем вызывает 'wget', чтобы получить страницу, а затем отбрасывает ее обратно через netcat... о черт, почему?

Apache, или Squid, вероятно, могут сделать эту работу.

0 голосов
/ 08 ноября 2010

Было бы сложно настроить, чтобы он работал правильно. Лучшим решением было бы использовать правильный прокси (например, squid) или просто прослушать трафик (wireshark, pastmon).

0 голосов
/ 29 октября 2010

Да, должно быть возможно.

Когда я [спросил о написании веб-сервера в bash 1 в группе новостей, у меня возникли две приличные идеи. Один из них заключался в том, чтобы использовать xinetd в качестве фактического сервера и запускать скрипт оболочки для каждого соединения; в вашем случае сценарий мог бы затем использовать tee и nc для пересылки и регистрации соединения (я думаю, с некоторыми хитростями файлового дескриптора, чтобы получить тройник для каждого потока). Другой - использовать socat, который позволяет вам написать полностью работающий сервер с прослушивающими сокетами и подпроцессами обработчика в bash; Опять же, вы бы хотели, чтобы tee и netcat вели протоколирование и проксирование.

Если вам нужен правильный прокси-сервер, чем, как говорит @Spacedman, вам нужно будет интерпретировать строку запроса, но это достаточно просто - прочитайте первую строку, примените cut -d ' ' -f 2, чтобы получить URL, какой-нибудь sed или shell операторы строки вытащить домен и порт и продолжить. Если вы заранее знаете, что весь трафик направляется в одну конечную точку, вы можете подключить его.

0 голосов
/ 29 октября 2010

Конечно, вы можете использовать это или пару faucet|hose, но зачем делать это, когда вы можете иметь минимальный экземпляр Apache, делать то же самое и предоставлять более полный набор функций анализа?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...