Как проверить открыт ли порт на сервере: команды nc, telnet, nmap
Почему сайт или база данных не отвечает?
При настройке удаленного подключения к базе данных MySQL (порт 3306), SSH (порт 22) или веб-сайту (порт 80/443) часто возникает ошибка тайм-аута соединения. Обычный ping проверяет только доступность сервера по протоколу ICMP, но не дает понимания: открыт ли конкретный порт в фаерволе и запущена ли на нем служба.
Способы быстрой проверки открытых портов
- Самый быстрый способ: утилита Netcat (nc):
# Синтаксис: nc -zv [IP_ИЛИ_ХОСТ] [НОМЕР_ПОРТА] nc -zv 192.168.1.50 80 nc -zv 192.168.1.50 3306Если порт открыт, вы получите ответ:
Connection to 192.168.1.50 80 port [tcp/http] succeeded!. Если закрыт —Connection refusedилиTimed out. - Классический способ через Telnet:
telnet 192.168.1.50 443Черный экран или сообщение Connected означают, что порт успешно отвечает. Для выхода нажмите Ctrl + ], затем введите
quit. - Мощное сканирование диапазона через Nmap:
# Установка: sudo apt install nmap -y # Сканирование конкретных портов: nmap -p 22,80,443,3306 192.168.1.50
Разбор параметров: Ключ -z в команде netcat означает режим сканирования без отправки данных, а -v (verbose) выводит подробный понятный результат на экран.
Частые вопросы (FAQ)
В чем разница между Connection refused и Connection timed out?
`Connection refused` означает, что сервер доступен, но программа на этом порту выключена. `Timed out` означает, что пакет блокируется фаерволом (UFW, iptables) или роутером.
Как проверить открытые порты на самом сервере изнутри?
Выполните команду `sudo ss -tulpn`. Она выведет все процессы, слушающие сетевые соединения прямо сейчас.
Как проверить UDP порт (например, для DNS или Wireguard)?
Добавьте флаг `-u` в утилиту netcat: `nc -zvu 192.168.1.1 53`.
Можно ли проверить порт стандартными средствами Windows без сторонних программ?
Да, в PowerShell есть встроенная команда: `Test-NetConnection -ComputerName 192.168.1.50 -Port 80`.