Sobes.tech
Junior

Cum verifici dacă un port este deschis pe un host remote sau local?

sobes.tech AI

Răspuns de la AI

Pentru a verifica dacă un port este deschis pe un host remote sau local, puteți folosi următoarele metode:

  1. netcat (nc): Un instrument universal pentru lucrul cu conexiuni de rețea.

    • Host local:
      nc -zv localhost <port>
      
    • Host remote:
      nc -zv <host_remote> <port>
      

    Opțiunile -z (mod zero-I/O) și -v (detaliat) sunt folosite pentru scanare fără a trimite date și pentru afișarea informațiilor detaliate.

  2. telnet: Protocol pentru management de la distanță, care poate fi folosit pentru a verifica conexiunea pe portul specificat.

    • Host local:
      telnet localhost <port>
      
    • Host remote:
      telnet <host_remote> <port>
      

    Dacă conexiunea se stabilește (de obicei apare o invitație sau un rând gol), portul este deschis. Se poate închide apăsând Ctrl+], apoi quit și Enter.

  3. nmap: Un scanner de porturi puternic. Necesită instalare.

    • Host local:
      nmap -p <port> localhost
      
    • Host remote:
      nmap -p <port> <host_remote>
      

    Ieșirea va arăta starea portului: open, closed sau filtered.

  4. < /dev/tcp sau < /dev/udp (în Bash): În Bash, se pot folosi descriptorii de fișiere pentru a crea conexiuni TCP sau UDP.

    • Host local (TCP):
      timeout 1 bash -c "cat < /dev/tcp/localhost/<port>" 2>/dev/null && echo "Port <port> este deschis" || echo "Port <port> este închis"
      
    • Host remote (TCP):
      timeout 1 bash -c "cat < /dev/tcp/<host_remote>/<port>" 2>/dev/null && echo "Port <port> este deschis" || echo "Port <port> este închis"
      

    timeout este folosit pentru a preveni blocarea dacă portul este închis. 2>/dev/null ascunde erorile. Această metodă nu funcționează pentru UDP.

  5. Python: Utilizarea socket-urilor pentru verificare.

    import socket
    
    def check_port(host, port):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(1)  # Setează timeout
        try:
            s.connect((host, port))
            print(f"Portul {port} pe {host} este deschis")
        except (socket.timeout, ConnectionRefusedError):
            print(f"Portul {port} pe {host} este închis sau filtrat")
        finally:
            s.close()
    
    # Exemplu de utilizare
    check_port("localhost", 80)       # Verificare host local
    check_port("google.com", 443)  # Verificare host remote
    

Alegerea metodei depinde de instrumentele disponibile, sistemul de operare și specificul sarcinii. netcat și nmap sunt unele dintre cele mai flexibile și informative instrumente.