Sobes.tech
Junior

Como verificar se uma porta está aberta num host remoto ou local?

sobes.tech IA

Resposta da IA

Para verificar se uma porta está aberta num host remoto ou local, pode usar os seguintes métodos:

  1. netcat (nc): Ferramenta universal para trabalhar com ligações de rede.

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

    As opções -z (modo zero-I/O) e -v (detalhado) são usadas para escanear sem enviar dados e para mostrar informações detalhadas.

  2. telnet: Protocolo para controlo remoto, que pode ser usado para verificar a ligação na porta especificada.

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

    Se a ligação for estabelecida (geralmente aparece um aviso ou linha vazia), a porta está aberta. Pode fechá-la pressionando Ctrl+], depois quit e Enter.

  3. nmap: Scanner de portas potente. Requer instalação.

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

    A saída mostrará o estado da porta: open, closed ou filtered.

  4. < /dev/tcp ou < /dev/udp (no Bash): No Bash, pode usar descritores de ficheiro para criar ligações TCP ou UDP.

    • Host local (TCP):
      timeout 1 bash -c "cat < /dev/tcp/localhost/<porta>" 2>/dev/null && echo "Porta <porta> está aberta" || echo "Porta <porta> está fechada"
      
    • Host remoto (TCP):
      timeout 1 bash -c "cat < /dev/tcp/<host_remoto>/<porta>" 2>/dev/null && echo "Porta <porta> está aberta" || echo "Porta <porta> está fechada"
      

    timeout é usado para evitar bloqueios se a porta estiver fechada. 2>/dev/null oculta erros. Este método não funciona para UDP.

  5. Python: Uso de sockets para verificar.

    import socket
    
    def check_port(host, port):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(1)  # Definir timeout
        try:
            s.connect((host, port))
            print(f"Porta {port} em {host} está aberta")
        except (socket.timeout, ConnectionRefusedError):
            print(f"Porta {port} em {host} está fechada ou filtrada")
        finally:
            s.close()
    
    # Exemplo de uso
    check_port("localhost", 80)       # Verificação do host local
    check_port("google.com", 443)  # Verificação do host remoto
    

A escolha do método depende das ferramentas disponíveis, do sistema operativo e da natureza da tarefa. netcat e nmap são algumas das ferramentas mais flexíveis e informativas.