Назад к вопросам
Junior
82
questionbank

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

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Можно использовать модуль socket.

import socket

def is_port_open(host, port, timeout=1):
    """
    Проверяет доступность порта на удаленной машине.

    Args:
        host (str): IP-адрес или доменное имя хоста.
        port (int): Номер порта.
        timeout (int): Таймаут подключения в секундах.

    Returns:
        bool: True, если порт открыт, False в противном случае.
    """
    try:
        s = socket.create_connection((host, port), timeout)
        s.close()
        return True
    except (socket.timeout, ConnectionRefusedError, OSError):
        return False

# Пример использования
if is_port_open("example.com", 80):
    print("Порт 80 на example.com открыт.")
else:
    print("Порт 80 на example.com закрыт.")

Также можно использовать более высокоуровневые библиотеки, например paramiko для SSH, если речь идет о проверке доступности сервисов по SSH.

import paramiko

def cab_ssh_connect(hostname: str, port: int, timeout: int) -> bool:
    """
    Проверяет возможность SSH подключения.

    Args:
        hostname (str): Имя или IP-адрес хоста.
        port (int): Порт SSH.
        timeout (int): Таймаут подключения в секундах.

    Returns:
        bool: True, если подключение возможно, иначе False.
    """
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        client.connect(hostname, port=port, timeout=timeout)
        return True
    except (paramiko.AuthenticationException, paramiko.SSHException, socket.error, TimeoutError):
        return False
    finally:
        client.close()


# Пример использования
if cab_ssh_connect("example.com", 22, 5):
    print("SSH порт 22 на example.com открыт.")
else:
    print("SSH порт 22 на example.com закрыт или таймаут.")

Выбор метода зависит от конкретной задачи и протокола, используемого портом. Наиболее универсальный способ - использование socket.