nc знают почти все. Но если нужно не просто открыть порт или проверить соединение, а быстро связать между собой TCP, UDP, Unix socket, файл, stdin/stdout или сделать простой туннель тут очень выручает socat. Название расшифровывается примерно как SOcket CAT. По сути, это утилита, которая умеет соединять два конца передачи данных. Этими концами могут быть:TCP-порт;
UDP-порт;
Unix socket;
файл;
pipe;
stdin/stdout;
псевдотерминал;
TLS-соединение.
▪️ Установка:
apt install socat
▪️ Самый простой пример - поднять TCP listener:
socat TCP-LISTEN:8080,fork STDOUT
Теперь все, что прилетает на порт 8080, будет выводиться в терминал.
Можно сделать простой echo-сервер:
socat TCP-LISTEN:8080,fork EXEC:/bin/cat
Подключаемся:
nc 127.0.0.1 8080
И все, что отправляем, возвращается обратно.
▪️ Очень частый сценарий - проброс порта:
socat TCP-LISTEN:8080,fork TCP:10.10.20.15:80
Теперь локальный порт 8080 будет проксировать трафик на 10.10.20.15:80. Это удобно, когда нужно быстро проверить сервис, временно открыть доступ или обойти неудобную сетевую схему без настройки полноценного reverse proxy.
▪️ socat также отлично работает с Unix socket. Например, если приложение слушает только Unix socket, можно временно вывести его в TCP:
socat TCP-LISTEN:9000,fork UNIX-CONNECT:/run/app/app.sock
И наоборот - TCP в Unix socket:
socat UNIX-LISTEN:/tmp/test.sock,fork TCP:127.0.0.1:8080
▪️ Еще полезный пример - тест UDP:
socat - UDP-LISTEN:5353,fork
И отправка UDP-пакета:
echo "test" | socat - UDP:127.0.0.1:5353
socat - это не замена нормальному reverse proxy, firewall, VPN или service mesh. Но для быстрой диагностики и временного связывания разных типов соединений он невероятно удобен. Когда нужно срочно понять, что происходит с портом, сокетом или сетевым потоком, socat часто оказывается тем самым инструментом, который решает задачу одной командой.
Главное - не забыть потом убрать временный listener.
#linux #socat
🧑💻 NetworkAdmin