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

Как проверить, открыт ли порт на удаленном или локальном хосте?

Sobes Copilot

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

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

sobes.tech AI

Для проверки открытого порта на удаленном или локальном хосте можно использовать следующие способы:

  1. netcat (nc): Универсальный инструмент для работы с сетевыми соединениями.

    • Локальный хост:
      nc -zv localhost <порт>
      
    • Удаленный хост:
      nc -zv <удаленный_хост> <порт>
      

    Опции -z (zero-I/O mode) и -v (verbose) используются для сканирования без отправки данных и для вывода подробной информации.

  2. telnet: Протокол для удаленного управления, который можно использовать для проверки соединения по указанному порту.

    • Локальный хост:
      telnet localhost <порт>
      
    • Удаленный хост:
      telnet <удаленный_хост> <порт>
      

    Если соединение устанавливается (обычно появляется приглашение или пустая строка), порт открыт. Закрыть можно нажатием Ctrl+], затем quit и Enter.

  3. nmap: Мощный сканер портов. Требует установки.

    • Локальный хост:
      nmap -p <порт> localhost
      
    • Удаленный хост:
      nmap -p <порт> <удаленный_хост>
      

    Вывод покажет статус порта: open, closed или filtered.

  4. < /dev/tcp или < /dev/udp (в Bash): В Bash можно использовать файловые дескрипторы для создания TCP или UDP соединений.

    • Локальный хост (TCP):
      timeout 1 bash -c "cat < /dev/tcp/localhost/<порт>" 2>/dev/null && echo "Port <порт> is open" || echo "Port <порт> is closed"
      
    • Удаленный хост (TCP):
      timeout 1 bash -c "cat < /dev/tcp/<удаленный_хост>/<порт>" 2>/dev/null && echo "Port <порт> is open" || echo "Port <порт> is closed"
      

    timeout используется для предотвращения зависания, если порт закрыт. 2>/dev/null скрывает вывод ошибок. Этот метод не работает для UDP.

  5. Python: Использование сокетов для проверки.

    import socket
    
    def check_port(host, port):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(1)  # Установка таймаута
        try:
            s.connect((host, port))
            print(f"Port {port} on {host} is open")
        except (socket.timeout, ConnectionRefusedError):
            print(f"Port {port} on {host} is closed or filtered")
        finally:
            s.close()
    
    # Пример использования
    check_port("localhost", 80)       # Проверка локального хоста
    check_port("google.com", 443)  # Проверка удаленного хоста
    

Выбор метода зависит от доступных инструментов, операционной системы и специфики задачи. netcat и nmap являются одними из наиболее гибких и информативных инструментов.