Sobes.tech
Junior

Come verificare se una porta è aperta su un host remoto o locale?

sobes.tech AI

Risposta dell'AI

Per verificare se una porta è aperta su un host remoto o locale, è possibile utilizzare i seguenti metodi:

  1. netcat (nc): Strumento universale per lavorare con le connessioni di rete.

    • Host locale:
      nc -zv localhost <porta>
      
    • Host remoto:
      nc -zv <host_remoto> <porta>
      

    Le opzioni -z (modalità zero-I/O) e -v (verbose) sono usate per scansionare senza inviare dati e per mostrare informazioni dettagliate.

  2. telnet: Protocollo per il controllo remoto, che può essere usato per verificare la connessione sulla porta specificata.

    • Host locale:
      telnet localhost <porta>
      
    • Host remoto:
      telnet <host_remoto> <porta>
      

    Se la connessione si stabilisce (di solito appare un invito o una riga vuota), la porta è aperta. Per chiuderla, premere Ctrl+], poi quit e Invio.

  3. nmap: Scanner di porte potente. Richiede installazione.

    • Host locale:
      nmap -p <porta> localhost
      
    • Host remoto:
      nmap -p <porta> <host_remoto>
      

    L'output mostrerà lo stato della porta: open, closed o filtered.

  4. < /dev/tcp o < /dev/udp (in Bash): In Bash, si possono usare i descrittori di file per creare connessioni TCP o UDP.

    • Host locale (TCP):
      timeout 1 bash -c "cat < /dev/tcp/localhost/<porta>" 2>/dev/null && echo "Port <porta> è aperta" || echo "Port <porta> è chiusa"
      
    • Host remoto (TCP):
      timeout 1 bash -c "cat < /dev/tcp/<host_remoto>/<porta>" 2>/dev/null && echo "Port <porta> è aperta" || echo "Port <porta> è chiusa"
      

    timeout viene usato per evitare blocchi se la porta è chiusa. 2>/dev/null nasconde gli errori. Questo metodo non funziona per UDP.

  5. Python: Uso di socket per la verifica.

    import socket
    
    def check_port(host, port):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(1)  # Imposta timeout
        try:
            s.connect((host, port))
            print(f"Porta {port} su {host} è aperta")
        except (socket.timeout, ConnectionRefusedError):
            print(f"Porta {port} su {host} è chiusa o filtrata")
        finally:
            s.close()
    
    # Esempio di utilizzo
    check_port("localhost", 80)       # Verifica host locale
    check_port("google.com", 443)  # Verifica host remoto
    

La scelta del metodo dipende dagli strumenti disponibili, dal sistema operativo e dalla specifica attività. netcat e nmap sono tra gli strumenti più flessibili e informativi.