Битлента
Сетевые команды и утилиты4 мин чтения·

nc -zv: как проверить порт и слушать соединения через netcat

Как проверить командой nc -zv, открыт ли TCP-порт, просканировать диапазон, открыть порт на прослушивание и передать файл по локальной сети.

Кратко

Команда nc -zv узел порт проверяет TCP-порт без отправки данных и печатает, удалось ли соединение. Ключ -w ограничивает ожидание, а nc -l порт открывает порт на прослушивание для проверки в своей сети.

Что такое netcat и чем он удобен

Netcat — небольшая утилита, которую часто называют «швейцарским ножом» сетевой диагностики. Она умеет открывать TCP- и UDP-соединения и передавать по ним всё, что вы введёте или перенаправите из файла. Для проверки порта её используют вместо telnet: команда короче, вывод понятнее, а выход не приходится искать по горячим клавишам.

Существует несколько реализаций: OpenBSD-вариант, используемый в большинстве современных дистрибутивов Linux и в macOS, традиционный netcat и ncat из пакета nmap. Основные ключи для проверки у них совпадают, но различия есть в записи прослушивания и в текстах сообщений. Если сомневаетесь, посмотрите справку командой nc -h или man nc: в ней указан именно ваш вариант.

В Windows nc по умолчанию нет. Можно установить ncat вместе с пакетом nmap, но проще воспользоваться Test-NetConnection, о которой рассказано на соседней странице.

Проверка порта: ключи и ответы

Основная команда: nc -zv example.com 443. Ключ -z означает «только проверить, не отправляя данных», ключ -v включает подробный вывод. Без -v команда молчит, и о результате говорит только код завершения.

КлючЧто делает
-zРежим сканирования: соединиться и закрыть без передачи данных
-vПодробный вывод; -vv ещё подробнее
-w NТаймаут в секундах
-uИспользовать UDP вместо TCP
-lСлушать входящее соединение
-nНе разрешать имена, работать только с адресами
-4, -6Принудительно IPv4 или IPv6
-p портУказать исходный порт; в некоторых версиях нужен и для -l

Пример вывода при успехе (пример): Connection to example.com 443 port [tcp/https] succeeded! В других версиях фраза звучит чуть иначе, например open. При отказе увидите connect to ... failed: Connection refused, что значит: узел ответил, но на порту никто не слушает. Если ответа нет вовсе, а команда ждёт и завершается по таймауту, пакеты, скорее всего, фильтруются. Поэтому в скриптах всегда задавайте -w, например -w 3.

Диапазон портов проверяется записью через дефис: nc -zv 192.168.1.20 20-25. В выводе увидите строку по каждому порту, а лишние отказы можно отфильтровать через grep succeeded в Linux и macOS. Для большого числа портов лучше использовать сканер, а не netcat.

Слушаем порт: проверка связи между двумя своими устройствами

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

  1. На принимающей машине откройте порт: nc -l 9000. В традиционной версии запись может быть nc -l -p 9000.
  2. На второй машине подключитесь: nc адрес-первой-машины 9000.
  3. Наберите любой текст на одной стороне и нажмите Enter: он должен появиться на другой.
  4. Если не появился, проверьте локальный межсетевой экран на принимающей стороне и убедитесь, что оба устройства находятся в одной подсети.
  5. Завершите сеанс сочетанием Ctrl и C.

Так легко отличить проблему сети от проблемы приложения. Если текст проходит, канал и порт работают, а сбой в конкретной программе. Если не проходит, ищите преграду на пути: правила брандмауэра, изоляцию клиентов в Wi-Fi, неверный интерфейс.

Так же можно передать файл внутри домашней сети: на приёме nc -l 9000 > result.bin, на отправке nc адрес 9000 < file.bin. Передача идёт без шифрования и проверки, поэтому годится лишь для доверенной локальной сети и небольших файлов. Для остального лучше scp.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Отличия macOS, Linux и Windows

В macOS утилита nc входит в систему, использует BSD-синтаксис, и все перечисленные ключи работают. В Linux в пакете может быть netcat-openbsd или netcat-traditional; в Debian и Ubuntu команду nc обычно предоставляет вариант OpenBSD, но это зависит от выбранного пакета. Отличие важно при прослушивании: в OpenBSD-версии достаточно nc -l 9000, в традиционной нужен ключ -p.

В Windows ключей нет вообще, пока не установлен ncat. Он ведёт себя почти так же, но с добавлением собственных опций, например --ssl. Синтаксис ncat -zv с некоторыми сборками работает иначе, чем в nc, так что проверяйте справку. Штатная альтернатива — Test-NetConnection в PowerShell.

Ограничения проверки UDP

С UDP есть принципиальная сложность: протокол не устанавливает соединение, поэтому «успех» в проверке -zu означает лишь то, что не пришло сообщение об ошибке ICMP. Служба может молчать, и порт будет показан как открытый, хотя ответа нет. Надёжно проверить UDP можно, только отправив запрос, который понимает конкретная служба, например DNS-запрос на порт 53. Поэтому к результату nc -zu относитесь как к подсказке, а не как к доказательству.

Соблюдайте границы: проверять порты можно на своих устройствах и сервисах. Сканирование чужих сетей и серверов без разрешения может нарушать правила провайдера и закон. Даже простая проверка одного порта чужого узла должна оставаться редким и оправданным действием.

Порядок действий при неудаче

Если nc сообщает об отказе или таймауте, идите от простого к сложному. Проверьте написание адреса и порта. Убедитесь, что служба действительно запущена на целевой машине: на Linux это делает ss -tulpn, на Windows netstat -ano. Проверьте, на каком интерфейсе она слушает: если только на 127.0.0.1, снаружи порт недоступен. Затем брандмауэр на самом узле, потом правила роутера, наконец — блокировка на стороне провайдера.

Полезно выполнить проверку локально, с того же узла: nc -zv 127.0.0.1 порт. Если так работает, а с другого устройства нет, проблема в сети или в межсетевом экране, а не в службе. Если и локально порт закрыт, служба не запущена или слушает другой порт.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
netcatncпортыtcp

Часто задаваемые вопросы

Читайте также