Обложка канала

ServerAdmin.ru

12437 @srv_admin

Авторская информация о системном администрировании.

ServerAdmin.ru

5 лет назад
Открыть в
​​В Linux существует не очень популярная и известная, но в некоторых случаях весьма полезная и функциональная сетевая утилита netcat или просто nc. Расскажу немного про неё и приведу примеры использования. Netcat позволяет устанавливать сетевые соединения и передавать по ним данные, как принимать, так и отправлять. Чаще всего nc используется при тестировании или настройке каких-то сервисов. Сразу простой пример. Когда настраиваете какой-то сервис по хранению логов, можно сразу же туда отправить с помощью Netcat содержимое какого-нибудь текстового лог файла. Например, логи веб сервера отправить в logstash на дефолтный порт для beats 5044: # nc logstash.local 5044 < /var/log/nginx/access.log Очень актуально при отладке своего grok фильтра. Там придётся постоянно перепроверять, что-то менять и заново генерировать данные. Можно и в обратную сторону выполнить передачу. Открыть у себя локально с помощью Netcat сетевой порт 8082, принять через него данные и сохранить в текстовый файл: # nc -l 8082 > /tmp/file.txt Можно с помощью первого примера отправить файл на эту систему. То есть полностью через nc перелить какие-то данные. Вариант просто чтобы протестировать работу. Я описал функционал, который использую сам. С помощью Netcat можно выполнять множество других действий, таких как сканирование портов, передача данных, в том числе архивов и целых образов дисков, отображать статическую веб страницу как веб сервер и др. Но по мне это всё баловство и есть более удачные инструменты для этих действий. А вот пульнуть куда-то лог весьма удобно. С помощью юниксовой магии в виде именованных каналов можно даже локальный редирект запросов на внешний хост сделать. Например, все локальные запросы на порт 1234 перенаправлять на адрес 1.2.3.4:80 # mkfifo proxy # while true; do nc -l 1234 0<proxy | nc 1.2.3.4 80 1> proxy; done Последний пример специально проверил на своём веб сервере. Реально работает редирект, если обратиться на локальный адрес 1234: # wget http://localhost:1234 На удалённый сервер запрос прилетает с заголовком домена localhost: 4.3.2.1 - localhost [12/Jan/2022:16:40:53 +0300] "GET / HTTP/1.1" 403 146 "-" "Wget/1.14 (linux-gnu)" Ещё один необычный пример с Netcat - потоковая передача видео. # cat film.avi | nc -l 4321 Теперь к этому потоку на порту 4321 можно подключиться каким-нибудь видео проигрывателем, например mplayer. # nc 1.2.3.4 4321 | mplayer -vo x11 -cache 3000 - Не проверял, как это работает. Если знаете еще какое-то полезное или необычное применение Netcat, делитесь в комментариях. #terminal