Netcat (nc): швейцарский нож для проверки портов и отладки сети
4 мин чтения Обновлено:
Netcat (nc): швейцарский нож для проверки портов и отладки сети

Netcat (nc): швейцарский нож для проверки портов и отладки сети

Netcat называют швейцарским ножом TCP/IP уже тридцать лет, и прозвище не устарело: одна маленькая утилита проверяет порты, слушает соединения, передаёт файлы и притворяется сервером. Разбираем приёмы, которые реально нужны владельцу сайта и админу, — с примерами, которые можно копировать.

Netcat (команда nc) — утилита, которая читает и пишет данные через сетевые соединения, TCP или UDP. В отличие от telnet, заточенного под интерактив, netcat создан для скриптов и одноразовых проверок: отработал — вернул код выхода — ушёл. В Linux и macOS он обычно уже установлен (наберите nc -h), в Windows нативного нет — но его роль там играет PowerShell с Test-NetConnection.

Приём 1. Проверить порт — главный сценарий

$ nc -zv prufen.ru 443
Connection to prufen.ru port 443 [tcp/https] succeeded!

Флаг -z — «только проверь, не передавай данные», -v — «расскажи словами». Исходы читаются как у telnet: succeeded — порт открыт, refused — хост жив, но порт закрыт, таймаут — файрвол молча ест пакеты (подробнее об этой разнице — в статье про telnet). Бонус netcat — диапазоны и списки портов одной командой:

$ nc -zv mail.example.ru 25 465 587 # три почтовых порта разом
$ nc -zv 10.0.0.5 3300-3310 # диапазон

Добавьте таймаут -w 3 — и команда пригодна для скриптов: код выхода 0 при успехе, 1 при неудаче. Мини-healthcheck готов.

Приём 2. Послушать порт — вторая половина диагностики

Уникальная способность netcat, которой нет у telnet: он умеет быть серверной стороной. Флаг -l начинает слушать порт:

# на сервере: слушаем порт 8080
$ nc -l 8080

# с другой машины: стучимся
$ nc -zv my-server.ru 8080

Зачем это нужно: когда сервис «не отвечает на порту», всегда есть два подозреваемых — сам сервис и сетевой путь до него. Netcat разводит их за минуту: остановите сервис, повесьте на его порт nc -l и постучитесь снаружи. Достучались до netcat — сеть и файрвол в порядке, чините сервис. Не достучались — сервис ни при чём, копайте файрвол и маршруты. Этот приём экономит часы взаимных обвинений «это у вас сеть» / «это у вас приложение».

Приём 3. Заглянуть в протокол

Netcat передаёт то, что вы ему даёте, — значит, им можно разговаривать с текстовыми протоколами. Проверить, что почтовый сервер жив и представляется правильным именем:

$ nc mail.example.ru 25
220 mail.example.ru ESMTP Postfix ← сервер представился
QUIT

Или отправить HTTP-запрос вручную (printf подаёт запрос на вход netcat):

$ printf 'HEAD / HTTP/1.1\r\nHost: prufen.ru\r\n\r\n' | nc prufen.ru 80
HTTP/1.1 301 Moved Permanently ...

Ограничение то же, что у telnet: внутрь TLS netcat не заглянет — для HTTPS-диагностики берите curl, он для этого и создан.

Приём 4. Перекинуть файл без FTP и флешек

Между двумя машинами в одной сети netcat заменяет файлообменник:

# принимающая сторона:
$ nc -l 9000 > backup.tar.gz

# отправляющая:
$ nc 10.0.0.5 9000 < backup.tar.gz

Быстро, без настройки — и без шифрования и проверки целостности: приём для доверенной сети и разовых задач, не для регулярных бэкапов.

UDP и зоопарк версий: два нюанса напоследок

UDP-проверки. Флаг -u переключает netcat на UDP: nc -zvu 8.8.8.8 53. Но читайте результат скептически: у UDP нет установления соединения, поэтому «open» здесь означает лишь «в ответ не прилетело отказа». Порт, закрытый файрволом молча, и порт открытый выглядят одинаково. Честный ответ про UDP-сервис даёт только запрос на языке самого сервиса — например, настоящий DNS-запрос через dig.

Версии netcat различаются. Под именем nc живут минимум три реализации — традиционная, OpenBSD и ncat из комплекта nmap — с немного разными флагами: где-то для завершения передачи нужен -N, где-то -q 1, у ncat есть встроенный TLS. Если пример из интернета «не работает» — сначала посмотрите nc -h: скорее всего, у вас просто другая версия. Для проверки портов (-zv) все три ведут себя одинаково.

Про этику: сканируйте только своё

Перебор портов на чужих серверах без разрешения владельца — как минимум повод для жалобы вашему провайдеру, как максимум состав правонарушения. Все приёмы выше — для собственной инфраструктуры и серверов, которые вы администрируете.

nc, telnet или Test-NetConnection: что когда

Задача Инструмент
Проверить порт из скрипта, диапазон портов nc -zv (с -w для таймаута)
Проверить порт с Windows без установки чего-либо Test-NetConnection -Port
Интерактивно пообщаться с текстовым протоколом telnet или nc
Проверить «сеть или сервис» (слушающая сторона) только nc -l
Всё, что за HTTPS/TLS curl
Следить за портом постоянно, из разных регионов внешний мониторинг

Последняя строка таблицы — не реклама ради рекламы, а то же ограничение, что у всех ручных инструментов: netcat показывает состояние порта из вашей точки и в момент запуска. Порт, который закрылся после обновления файрвола в субботу ночью, nc покажет вам в понедельник — если вы догадаетесь проверить. Проверка порта по расписанию делает ту же TCP-пробу с интервалом от 2 минут из 13 точек, а обзор всех способов — от онлайн-инструментов до утилит — собран в статье о проверке портов.

Порт под присмотром — без ручных проверок

Пруфен стучится в ваши порты — SMTP, база, панель, что угодно — из 13 точек — 11 из них в России — с интервалом от 2 минут и сообщает в Email, Telegram, Макс или звонком, как только порт перестал отвечать. Бесплатного тарифа хватает на 5 проверок.

Была ли статья полезна?

Начните мониторинг прямо сейчас

Бесплатный тариф — до 5 проверок. 150 ₽ на баланс при регистрации.

Создать аккаунт