Назад к вопросам
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.