CLI AI

Проверка, открыт ли порт на удалённом сервере

2026-06-10

Быстрая проверка — nc -zv host port: «succeeded» значит порт открыт, «refused» значит машина ответила, но никто не слушает, а полное молчание почти всегда значит, что фаервол роняет пакет. Это три разных отказа с тремя разными способами лечения. Дальше — дерево решений, чтобы их различать, а не ещё один список из пяти утилит, которые делают одно и то же рукопожатие.

1. Порт правда открыт?

clai
$ clai проверь, открыт ли порт 8099 на 127.0.0.1→ nc -zv 127.0.0.1 8099Connection to 127.0.0.1 8099 port [tcp/*] succeeded!

-z только проверяет соединение, ничего не отправляя, -v печатает результат. Это самый короткий ответ на вопрос.

2. Порт закрыт — и это тоже конкретный ответ

clai
$ clai проверь порт 8098→ nc -zv 127.0.0.1 8098nc: connect to 127.0.0.1 port 8098 (tcp) failed: Connection refused

«Connection refused» означает, что машина доступна и ответила отказом — то есть на этом порту никто не слушает. Это хорошая новость: сеть в порядке, проблема в сервисе.

3. Как отличить отказ от тишины

clai
$ clai проверь порты 8098 и 8099 и покажи причину→ nmap --reason -p 8099,8098 127.0.0.1PORT     STATE  SERVICE REASON8098/tcp closed unknown conn-refused8099/tcp open   unknown syn-ack

Колонка REASON и есть диагноз. syn-ack — открыт. conn-refused — никто не слушает. no-response — пакет утонул, почти всегда фаервол. Только здесь три причины видны по отдельности.

4. Взгляд с другой стороны: кто слушает

clai
$ clai покажи, какой процесс слушает порт 8099→ ss -tlnp | grep 8099LISTEN 0      5            0.0.0.0:8099       0.0.0.0:*    users:(("python3",pid=2411411,fd=3))

0.0.0.0:8099 означает «на всех интерфейсах». Если бы там было 127.0.0.1:8099, сервис отвечал бы только локально, и снаружи вы получили бы отказ при полностью исправном сервисе. Это третья причина, и видна она только отсюда.

5. Нет ни nc, ни nmap

clai
$ clai проверь порт без установки дополнительных утилит→ timeout 2 bash -c 'echo > /dev/tcp/127.0.0.1/8099' && echo "open" || echo "closed"open

bash умеет открывать TCP-соединения через псевдоустройство /dev/tcp. Работает на голом контейнере, где нет ни nc, ни nmap. timeout обязателен, иначе на фильтруемом порту вы будете ждать таймаута ядра.

6. Проверить сразу несколько портов на удалённом хосте

clai
$ clai проверь порты 22, 80 и 443 на example.com→ nmap -Pn -p 22,80,443 example.com

-Pn пропускает пинг-проверку. Многие хосты не отвечают на ICMP, и без этого флага nmap решит, что машина недоступна, и вообще не станет сканировать порты.

Грабли

  • «Connection refused» и «таймаут» — разные диагнозы. Отказ означает, что пакет дошёл до машины. Тишина означает фаервол или потерю пакетов. Не лечите одно средствами другого.
  • Сканирование чужих хостов может быть незаконным. Направляйте nmap на свою инфраструктуру, а не на чужую.
  • UDP так не проверить. Для UDP нет рукопожатия, и nc -zu почти всегда покажет «succeeded». Нужен nmap -sU и терпение.

Похожие вопросы

Порт открыт, но приложение не отвечает. Значит, слушает не тот процесс или он не успевает ответить. Посмотрите вывод ss -tlnp и логи сервиса.

Как проверить порт из-под Windows? Test-NetConnection -Port 443 example.com в PowerShell.

Почему telnet больше не советуют? Он делает то же самое, но чаще всего не установлен, а nc и /dev/tcp доступны почти везде.

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

Не запоминайте флаги nc и nmap — опишите проблему, а команду напишет CliAI. Установка одной строкой.