Классический nc (netcat) умеет слушать порт и коннектиться, но для шифрования приходится городить отдельный TLS-туннель поверх. Ncat — реализация той же идеи от команды Nmap, где SSL встроен прямо во флаги, без openssl s_client или stunnel сбоку.

Слушатель и подключение — тот же минимализм, что у nc:

ncat -l 4444        # слушать на порту 4444
ncat host.example 4444   # подключиться

Разница начинается там, где классическому netcat нужна дополнительная обвязка. Шифрованное соединение — один флаг на обеих сторонах:

ncat --ssl -l 4444
ncat --ssl host.example 4444

Ещё одно отличие от socat (которым на этом же блоге уже разбирали TCP-форвардинг и TLS-прокси) — у ncat флаги человекочитаемые (--ssl, --listen, --exec) вместо адресной нотации TCP-LISTEN:port,fork. Проще писать на ходу, но под капотом меньше гибкости: socat соединяет произвольные типы потоков (файлы, UNIX-сокеты, serial-порты), а ncat заточен конкретно под TCP/UDP-сокеты с акцентом на диагностику и шеллы.

--exec/-e запускает команду на каждое входящее соединение — удобно поднять временный echo-сервис для теста, хотя в проде так разворачивать реальный shell-доступ не стоит:

ncat -l 4444 --sh-exec "cat /var/log/app/last.log"

--broker переключает ncat в режим ретранслятора: несколько клиентов подключаются к одному слушающему порту и получают трафик друг друга — пригождается, когда обе стороны сидят за NAT и напрямую достучаться друг до друга не могут, а поднять что-то с публичным адресом посередине — не проблема.

#linux #network #sysadmin