Sobes.tech
Junior

Как да проверите дали портът е отворен на отдалечен или локален хост?

sobes.tech AI

Отговор от 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 <порт> е затворен"
      

    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} е отворен")
        except (socket.timeout, ConnectionRefusedError):
            print(f"Port {port} on {host} е затворен или филтриран")
        finally:
            s.close()
    
    # Пример за използване
    check_port("localhost", 80)       # Проверка на локалния хост
    check_port("google.com", 443)  # Проверка на отдалечения хост
    

Изборът на метод зависи от наличните инструменти, операционната система и спецификата на задачата. netcat и nmap са едни от най-гъвкавите и информативни инструменти.