netcat (nc): проверить порт, передать файл, поднять временный сервер

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

21 октября 2026 г.·4 мин чтения·netcat, network, linux

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 и трассировку.