Sobes.tech
Junior

Jak zjistit, zda je port na vzdáleném nebo místním hostiteli otevřený?

sobes.tech AI

Odpověď od AI

Pro kontrolu otevřeného portu na vzdáleném nebo místním hostiteli lze použít následující způsoby:

  1. netcat (nc): Univerzální nástroj pro práci se síťovými připojeními.

    • Místní hostitel:
      nc -zv localhost <port>
      
    • Vzdálený hostitel:
      nc -zv <vzdálený_host> <port>
      

    Volby -z (zero-I/O mode) a -v (verbose) se používají pro skenování bez odesílání dat a pro zobrazení podrobností.

  2. telnet: Protokol pro vzdálené řízení, který lze použít k ověření spojení na daném portu.

    • Místní hostitel:
      telnet localhost <port>
      
    • Vzdálený hostitel:
      telnet <vzdálený_host> <port>
      

    Pokud se spojení naváže (obvykle se objeví výzva nebo prázdný řádek), je port otevřený. Zavřít lze stiskem Ctrl+], poté quit a Enter.

  3. nmap: Výkonný skener portů. Vyžaduje instalaci.

    • Místní hostitel:
      nmap -p <port> localhost
      
    • Vzdálený hostitel:
      nmap -p <port> <vzdálený_host>
      

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

  4. < /dev/tcp nebo < /dev/udp (v Bash): V Bash lze použít souborové deskriptory k vytvoření TCP nebo UDP spojení.

    • Místní hostitel (TCP):
      timeout 1 bash -c "cat < /dev/tcp/localhost/<port>" 2>/dev/null && echo "Port <port> is open" || echo "Port <port> is closed"
      
    • Vzdálený hostitel (TCP):
      timeout 1 bash -c "cat < /dev/tcp/<vzdálený_host>/<port>" 2>/dev/null && echo "Port <port> is open" || echo "Port <port> is closed"
      

    timeout se používá k zabránění zaseknutí, pokud je port uzavřen. 2>/dev/null skrývá chybové výstupy. Tento způsob nefunguje pro UDP.

  5. Python: Použití socketů k ověření.

    import socket
    
    def check_port(host, port):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(1)  # Nastavení časového limitu
        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()
    
    # Příklad použití
    check_port("localhost", 80)       # Kontrola místního hostitele
    check_port("google.com", 443)  # Kontrola vzdáleného hostitele
    

Volba metody závisí na dostupných nástrojích, operačním systému a specifikách úkolu. netcat a nmap jsou jedny z nejflexibilnějších a nejvíce informativních nástrojů.