Sobes.tech
Junior

Ako skontrolovať, či je port otvorený na vzdialenom alebo lokálnom hostiteľovi?

sobes.tech AI

Odpoveď od AI

Pre kontrolu otvoreného portu na vzdialenom alebo lokálnom hostiteľovi môžete použiť nasledujúce spôsoby:

  1. netcat (nc): Univerzálny nástroj na prácu so sieťovými spojeniami.

    • Lokálny hostiteľ:
      nc -zv localhost <port>
      
    • Vzdialený hostiteľ:
      nc -zv <vzdialený_host> <port>
      

    Voľby -z (zero-I/O mode) a -v (verbose) sa používajú na skenovanie bez odosielania dát a na zobrazenie podrobností.

  2. telnet: Protokol na vzdialené riadenie, ktorý možno použiť na overenie spojenia na danom porte.

    • Lokálny hostiteľ:
      telnet localhost <port>
      
    • Vzdialený hostiteľ:
      telnet <vzdialený_host> <port>
      

    Ak sa spojenie nadviaže (zvyčajne sa objaví výzva alebo prázdny riadok), je port otvorený. Zavrieť ho možno stlačením Ctrl+], potom quit a Enter.

  3. nmap: Výkonný skener portov. Vyžaduje inštaláciu.

    • Lokálny hostiteľ:
      nmap -p <port> localhost
      
    • Vzdialený hostiteľ:
      nmap -p <port> <vzdialený_host>
      

    Výstup ukáže stav portu: open, closed alebo filtered.

  4. < /dev/tcp alebo < /dev/udp (v Bash): V Bash možno použiť súborové deskriptory na vytvorenie TCP alebo UDP spojení.

    • Lokálny hostiteľ (TCP):
      timeout 1 bash -c "cat < /dev/tcp/localhost/<port>" 2>/dev/null && echo "Port <port> is open" || echo "Port <port> is closed"
      
    • Vzdialený hostiteľ (TCP):
      timeout 1 bash -c "cat < /dev/tcp/<vzdialený_host>/<port>" 2>/dev/null && echo "Port <port> is open" || echo "Port <port> is closed"
      

    timeout sa používa na zabránenie zaseknutiu, ak je port zatvorený. 2>/dev/null skrýva chybové výstupy. Tento spôsob nefunguje pre UDP.

  5. Python: Použitie socketov na overenie.

    import socket
    
    def check_port(host, port):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(1)  # Nastavenie timeoutu
        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()
    
    # Príklad použitia
    check_port("localhost", 80)       # Kontrola lokálneho hostiteľa
    check_port("google.com", 443)  # Kontrola vzdialeného hostiteľa
    

Výber metódy závisí od dostupných nástrojov, operačného systému a špecifík úlohy. netcat a nmap sú jedny z najflexibilnejších a najviac informatívnych nástrojov.