Ответ
В DevOps-работе проверка доступности порта на удалённом хосте — это стандартный шаг при диагностике инцидентов или валидации конфигурации. Я действую по такому алгоритму:
1. Быстрая проверка базовой связности:
ping -c 2 <remote_host>
Если хост не пингуется (например, из-за запрета ICMP), перехожу сразу к проверке порта.
2. Проверка конкретного TCP-порта (основной метод):
# Использую netcat, если он установлен
nc -zv -w 3 <remote_host> <port>
# Ключ -w задаёт таймаут в секундах.
3. Если netcat недоступен, использую telnet или чистый Bash:
telnet <remote_host> <port>
# Или
timeout 3 bash -c "cat < /dev/null > /dev/tcp/<remote_host>/<port>" 2>/dev/null && echo "SUCCESS" || echo "FAILED"
4. Для комплексного сканирования или проверки диапазона портов:
# Устанавливаю nmap при необходимости
sudo apt-get install -y nmap # для Debian/Ubuntu
# Быстрое сканирование одного порта
nmap -p <port> <remote_host>
# Проверка, что порт открыт и сервис его "слышит"
nmap -sT -p <port> <remote_host>
5. Автоматизация в скриптах: Для мониторинга или CI/CD пайплайнов пишу простые Python-скрипты:
import socket
def check_port(host, port, timeout=2):
try:
with socket.create_connection((host, port), timeout=timeout):
return True
except (socket.timeout, ConnectionRefusedError):
return False
# Использование
if check_port("example.com", 443):
print("HTTPS порт открыт")
Важно: Всегда учитываю, что доступность порта может блокироваться сетевым экраном на пути (iptables, облачные Security Groups, корпоративный фаервол). Поэтому проверяю с разных точек (изнутри VPC, из публичной сети).