Использование netcat (nc) в качестве HTTP-прокси-сервера и монитора
Можно ли использовать программу netcat (nc) Unix для создания прокси-сервера и монитора TCP? Я бы хотел, чтобы весь трафик TCP был передан по всему каналу, а также отправлен на stdout для мониторинга. Обратите внимание, что это будет использоваться для мониторинга HTTP-трафика между аппаратным устройством и HTTP-сервером.
Ответы
Ответ 1
Просто вчера была нужна. Здесь вы можете найти ответ (французский): 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
. Идентифицированный канал необходим для двунаправленного соединения.
Ответ 2
Не netcat сам по себе, так как он должен будет интерпретировать HTTP-запрос и передавать его. Например, HTTP-запрос через прокси-сервер начинается с:
GET http://www.example.org/ HTTP/1.1
который должен пройти ваш прокси-сервер: "Хорошо, я должен подключиться к example.org и GET/'.
Теперь это может быть сделано путем соединения вывода nc в script, который анализирует HTTP-запрос, а затем вызывает "wget", чтобы получить страницу, а затем прорвать ее обратно через netcat... о, черт, почему?
Apache, или кальмар, возможно, справится с этой задачей.
Ответ 3
Конечно, вы можете использовать его или пару faucet|hose
, но зачем это делать, когда вы можете иметь минимальный экземпляр Apache, сделать то же самое и предоставить более полный набор функций?
Ответ 4
Да, должно быть возможно.
Когда я [спросил о написании веб-сервера в bash 1 в новостной группе, у меня появились две достойные идеи. Один из них заключался в том, чтобы использовать xinetd в качестве реального сервера и запустить для него оболочку script; в вашем случае script может затем использовать tee и nc для пересылки и регистрации соединения (с некоторым обманом дескриптора файла, чтобы получить тройник для каждого потока, я думаю). Другим было использование socat, которое эффективно позволяет вам писать полностью работоспособный сервер с прослушивающими сокетами и подпроцессами обработчика в bash; опять же, вы хотели бы, чтобы tee и netcat выполняли протоколирование и проксирование.
Если вам нужен правильный прокси-сервер, чем, как говорит @Spacedman, вам нужно будет интерпретировать строку запроса, но это достаточно просто - прочитайте первую строку, примените cut -d ' ' -f 2
, чтобы получить URL-адрес, некоторый sed или shell операторов строки, чтобы вывести домен и порт и продолжить. Если вы знаете заранее, что весь трафик идет на одну конечную точку, вы можете это сделать.
Ответ 5
Было бы сложно настроить так, чтобы он работал правильно. Лучшим решением было бы использовать правильный прокси (например, кальмар) или просто обнюхивать трафик (wirehark, pastmon).