В 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.14.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