netcat (nc): проверить порт, передать файл, поднять временный сервер
Основные приёмы nc на Linux: проверка TCP и UDP-портов, передача сообщений и файлов между серверами, временный HTTP-ответ, ручные запросы к сервисам. Ubuntu, Debian, AlmaLinux.

nc (netcat) — маленькая утилита, которая умеет две вещи: подключаться к адресу и порту и ждать подключений на своём порту. Ничего от себя она не добавляет: всё, что вы введёте или передадите через |, уходит в сеть как есть, а всё, что приходит, выводится на экран. Этого хватает, чтобы проверить, открыт ли порт, передать файл между серверами или убедиться, что брандмауэр пропускает подключения.
Замеры ниже делались на VPS в Германии — на tanaka.host у каждого сервера свой IPv4 и IPv6, так что проверять можно оба стека.
Установка
Версий netcat несколько, и ключи у них различаются. На Debian и Ubuntu по умолчанию netcat-openbsd — примеры ниже для неё. На RHEL-семействе nc живёт в пакете nmap-ncat и часть ключей отличается.
# Debian, Ubuntu
sudo apt update && sudo apt install -y netcat-openbsd
# AlmaLinux, Rocky
sudo dnf install -y nmap-ncat
Основные ключи
| Ключ | Что делает |
|---|---|
-z |
Проверить порт без передачи данных |
-v |
Выводить подробности; без него при проверке nc молчит |
-w 3 |
Ждать ответа не дольше 3 секунд |
-u |
UDP вместо TCP |
-l |
Режим ожидания подключений на порту |
-N |
Закрыть соединение, когда входные данные кончились |
-k |
Не закрывать порт после первого подключения |
1. Открыт ли порт
Самое частое применение: проверить, доступен ли сайт, почтовый сервер или порт VPN.
nc -zv -w 3 1.1.1.1 443
Ответ бывает трёх видов:
Connection to 1.1.1.1 443 port [tcp/https] succeeded!
nc: connect to 127.0.0.1 port 8081 (tcp) failed: Connection refused
nc: connect to 1.1.1.1 port 81 (tcp) timed out: Operation now in progress
succeeded— порт открыт и на нём кто-то отвечает.Connection refused— сервер доступен, но на порту ничего не запущено (или слушает только127.0.0.1).timed out— ответа нет совсем. Чаще всего порт закрыт брандмауэром или пакеты режутся по пути.
Диапазон портов за раз: nc -zv -w 2 1.1.1.1 79-81.
2. UDP — почему проверке нельзя верить
nc -zvu -w 2 1.1.1.1 9999
Connection to 1.1.1.1 9999 port [udp/*] succeeded!
На этом порту ничего не работает, а nc пишет succeeded. UDP не устанавливает соединение, и nc считает проверку успешной, если никто не ответил отказом — а отказ (ICMP port unreachable) большинство серверов не шлёт. Для WireGuard, AmneziaWG, DNS и других UDP-сервисов такая проверка мало что доказывает. Надёжнее смотреть на самом сервере, слушает ли сервис:
ss -lnup
3. Сообщение между серверами
На первом сервере — ожидание на любом свободном порту:
nc -l 12345
На втором — подключаемся и шлём строку:
echo "привет с другого сервера" | nc -N IP_ПЕРВОГО_СЕРВЕРА 12345
Текст появится в окне первого сервера. Если вместо echo просто выполнить nc IP 12345, получится чат: всё, что печатаете на одном сервере, появляется на другом. Порт на первом сервере нужно открыть в брандмауэре.
Это и есть самый честный тест «пропускает ли файрвол порт»: если сообщение дошло — пропускает.
4. Передача файла
Принимающая сторона:
nc -l 12346 > backup.tar.gz
Отправляющая:
nc -N IP_ПРИНИМАЮЩЕГО_СЕРВЕРА 12346 < backup.tar.gz
После передачи сверьте контрольные суммы на обеих сторонах — sha256sum backup.tar.gz — они должны совпасть.
nc не шифрует. Всё идёт по сети открытым текстом. Для дампов баз, ключей и чего угодно с паролями используйте
scpилиrsyncповерх SSH — см. резервные копии VPS. nc уместен для больших неважных файлов во внутренней сети, где SSH-шифрование упирается в процессор.
5. Временный веб-сервер
Нужно проверить, доходит ли трафик до порта, когда приложение ещё не установлено. nc может ответить на один HTTP-запрос:
printf 'HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nHello from nc\n' | nc -l -N 8080
Откройте в браузере http://IP_СЕРВЕРА:8080 — увидите Hello from nc, а в терминале сервера появится сам запрос браузера с GET / HTTP/1.1, Host, User-Agent. Если страница не открылась — порт закрыт на сервере или по пути.
6. Ручной запрос к сервису
nc позволяет отправить запрос руками и увидеть сырой ответ. Заголовки сайта:
printf 'HEAD / HTTP/1.0\r\nHost: example.com\r\n\r\n' | nc -w 5 example.com 80
HTTP/1.1 200 OK
Date: Tue, 20 Oct 2026 19:44:21 GMT
Content-Type: text/html; charset=utf-8
Так же смотрят приветствие почтового сервера на порту 25 (220 mail.example.com ESMTP) или SSH на 22 (SSH-2.0-OpenSSH_9.6): nc -w 5 example.com 22. Для TLS-портов (443, 993, 465) нужен openssl s_client -connect host:443, nc покажет только бинарный мусор.
Частые ошибки
Команда не найдена — apt install -y netcat-openbsd или dnf install -y nmap-ncat.
Ключ из инструкции не работает — инструкция для другой версии. В старом netcat-traditional порт ожидания задаётся как -l -p 12345, в openbsd — -l 12345; в nmap-ncat нет -N, вместо него --send-only. Ключи вашей версии: nc -h.
Передача файла не заканчивается — на отправляющей стороне нет -N. Остановите Ctrl+C, повторите с -N, сверьте суммы.
Порт открыт в nc, а приложение не подключается — nc проверяет только, что порт принимает соединения. Дальше — настройки или протокол приложения: смотрите его журнал, а если подозреваете сеть — tcpdump и трассировку.