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

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

Sobes Copilot

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

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

sobes.tech AI

Можно использовать несколько подходов:

  1. Telnet: Простой способ для проверки TCP-портов.

    # Проверка доступности порта 22 на сервере 192.168.1.10
    telnet 192.168.1.10 22
    

    Если соединение установлено, порт доступен. Если нет - порт закрыт или недоступен.

  2. nc (netcat): Более универсальный инструмент.

    # Проверка доступности TCP-порта 80 на сервере example.com
    nc -zv example.com 80
    
    # Проверка доступности диапазона портов TCP 20-23 на 192.168.1.10
    nc -zv 192.168.1.10 20-23
    
    # Проверка доступности UDP-порта 53
    nc -zvu example.com 53
    

    Опция -z выполняет нулевой ввод/вывод (сканирование), -v для подробного вывода, -u для UDP.

  3. Nmap: Мощный сканер портов.

    # Сканирование конкретного TCP-порта на удаленной машине
    nmap -p 22 192.168.1.10
    
    # Сканирование нескольких портов
    nmap -p 22,80,443 example.com
    
    # Сканирование диапазона портов
    nmap -p 1-100 192.168.1.10
    
    # Сканирование UDP-портов
    nmap -sU -p 53 example.com
    

    Nmap предоставляет более детальную информацию о состоянии порта (open, closed, filtered).

  4. Python: Написание простого скрипта с использованием модуля socket.

    import socket
    
    def is_port_open(host, port):
        """
        Проверяет доступность TCP-порта на удаленном хосте.
        Возвращает True, если порт открыт, иначе False.
        """
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(1) # Установка таймаута в 1 секунду
        try:
            s.connect((host, port))
            return True
        except (socket.timeout, ConnectionRefusedError, OSError):
            return False
        finally:
            s.close()
    
    # Пример использования:
    host = 'example.com'
    port = 80
    
    if is_port_open(host, port):
        print(f"Порт {port} на {host} доступен.")
    else:
        print(f"Порт {port} на {host} недоступен.")
    

Каждый метод имеет свои преимущества и недостатки в зависимости от задачи и уровня детализации, который требуется. Для простой проверки доступности Telnet или nc часто достаточно. Для более глубокого анализа или автоматизации проверки Python-скрипт или Nmap предоставляют больше возможностей.