← Назад к вопросам

Как проверить доступность порта на удаленной машине

1.3 Junior🔥 202 комментариев
#Сети и протоколы#Linux и администрирование

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

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

Проверка доступности порта на удаленной машине — это базовая, но критически важная задача для инженера DevOps. Она позволяет диагностировать проблемы с сетевыми сервисами, проверять корректность настройки брандмауэров и убеждаться в работоспособности приложений. В основе этой проверки лежит установка TCP-соединения (или, реже, UDP) с указанным хостом и портом.

Существует множество инструментов и методов для этой задачи, каждый со своими сценариями применения.

1. Универсальные сетевые утилиты

Эти инструменты предустановлены или легко доступны в большинстве операционных систем.

nc (netcat) / ncat — «швейцарский армейский нож» для TCP/IP Чаще всего используется для быстрой проверки. Успешное соединение означает, что порт открыт и сервис готов принять подключение.

# Базовая проверка TCP-порта (выход пуст при успехе)
nc -zv example.com 443

# Проверка с таймаутом и указанием протокола
nc -z -v -w 5 example.com 22

# Проверка диапазона портов
nc -zv example.com 20-25
  • -z — режим сканирования (без передачи данных).
  • -v — подробный вывод.
  • -w — таймаут в секундах.

telnet — классический клиент для интерактивной проверки Позволяет не только установить соединение, но и отправить данные (например, HTTP-запрос). Идеально для проверки текстовых протоколов (HTTP, SMTP, Redis).

telnet example.com 80

После успешного соединения можно вручную ввести, например, GET / HTTP/1.0 и дважды нажать Enter, чтобы получить HTTP-ответ.

nmap — мощный инструмент для аудита безопасности Используется для глубокого анализа, сканирования диапазонов портов и определения сервисов.

# Быстрое сканирование одного порта
nmap -p 5432 db-host.example.com

# Проверка наиболее распространенных портов
nmap -F example.com

2. Специализированные инструменты для разработчиков и DevOps

cURL — для HTTP/HTTPS и не только Лучший выбор для проверки веб-сервисов, API, а также для тестирования TLS/SSL.

# Проверка доступности HTTP-сервера (получение только заголовков)
curl -I --connect-timeout 10 http://example.com:8080/health

# Проверка HTTPS-порта с игнорированием ошибок сертификата
curl -k --silent --output /dev/null --fail https://example.com:8443 && echo "Port is reachable"

ssh — проверка с последующим выполнением команд Если доступен SSH, можно использовать его как транспорт для проверки портов на внутренних хостах или в приватных сетях (прокси-джемпер, бастион).

# Проверка порта на внутреннем хосте через SSH-бастион
ssh -J user@bastion-host user@target-host 'nc -zv localhost 27017'

3. Встроенные возможности языков программирования

Это особенно полезно для скриптов автоматизации (CI/CD, healthchecks) или в случаях, когда установка сторонних утилит невозможна.

Python с использованием модуля socket:

import socket

def check_port(host, port, timeout=3):
    try:
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
            sock.settimeout(timeout)
            result = sock.connect_ex((host, port))
            return result == 0  # 0 означает успех
    except Exception as e:
        return False

if check_port("example.com", 3306):
    print("MySQL порт открыт")
else:
    print("Порт недоступен")

Bash с использованием встроенных функций /dev/tcp или /dev/udp:

# Использование специальных файлов /dev/tcp в Bash
timeout 3 bash -c "cat < /dev/null > /dev/tcp/example.com/443" && echo "Port is open"

4. Диагностика при неудачной проверке

Если порт недоступен, необходимо провести многоуровневую диагностику:

  1. Локальная сеть: Проверить базовую связность с хостом (ping, traceroute).
  2. Удаленный сервис: Убедиться, что целевой сервис запущен и слушает на нужном порту (на удаленной машине: ss -tlnp | grep :<port>, netstat -tulpn).
  3. Брандмауэр на удаленном хосте: Проверить правила iptables, nftables или firewalld.
  4. Сетевой брандмауэр/безопасность группы (Security Group): Убедиться, что в облачном провайдере (AWS SG, GCP Firewall Rules) или корпоративном межсетевом экране разрешен входящий трафик на нужный порт с вашего IP-адреса.
  5. Безопасность на уровне ОС: Проверить настройки SELinux или AppArmor, которые могут блокировать работу сервиса.

Ключевые принципы для DevOps

  • Контекст: Выбор инструмента зависит от задачи — быстрая ручная проверка (nc), скрипт здоровья (curl, Python), аудит (nmap).
  • Таймауты: Всегда устанавливайте адекватные таймауты в скриптах автоматизации, чтобы они не «зависали».
  • Безопасность: Помните, что активное сканирование портов (nmap) может быть расценено как враждебная активность. Согласовывайте такие действия.
  • Мониторинг: Проверка порта — это простейшая форма health check. В современных системах (Kubernetes, Docker Swarm, мониторинг) именно такие проверки используются для определения живости (liveness) и готовности (readiness) сервисов.

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