Sobes.tech
Junior

Jak sprawdzić, czy port jest otwarty na zdalnym lub lokalnym hoście?

sobes.tech AI

Odpowiedź od AI

Aby sprawdzić, czy port jest otwarty na zdalnym lub lokalnym hoście, można użyć następujących metod:

  1. netcat (nc): Uniwersalne narzędzie do pracy z połączeniami sieciowymi.

    • Lokalny host:
      nc -zv localhost <port>
      
    • Zdalny host:
      nc -zv <zdalny_hosta> <port>
      

    Opcje -z (tryb zero-I/O) i -v (verbose) służą do skanowania bez wysyłania danych i wyświetlania szczegółowych informacji.

  2. telnet: Protokół do zdalnego zarządzania, który można użyć do sprawdzenia połączenia na wskazanym porcie.

    • Lokalny host:
      telnet localhost <port>
      
    • Zdalny host:
      telnet <zdalny_hosta> <port>
      

    Jeśli połączenie zostanie nawiązane (zazwyczaj pojawia się zaproszenie lub pusty wiersz), port jest otwarty. Zamknąć można przez naciśnięcie Ctrl+], potem quit i Enter.

  3. nmap: Potężny skaner portów. Wymaga instalacji.

    • Lokalny host:
      nmap -p <port> localhost
      
    • Zdalny host:
      nmap -p <port> <zdalny_hosta>
      

    Wyjście pokaże status portu: open, closed lub filtered.

  4. < /dev/tcp lub < /dev/udp (w Bash): W Bash można używać deskryptorów plików do tworzenia połączeń TCP lub UDP.

    • Lokalny host (TCP):
      timeout 1 bash -c "cat < /dev/tcp/localhost/<port>" 2>/dev/null && echo "Port <port> jest otwarty" || echo "Port <port> jest zamknięty"
      
    • Zdalny host (TCP):
      timeout 1 bash -c "cat < /dev/tcp/<zdalny_hosta>/<port>" 2>/dev/null && echo "Port <port> jest otwarty" || echo "Port <port> jest zamknięty"
      

    timeout służy do zapobiegania zawieszaniu się, jeśli port jest zamknięty. 2>/dev/null ukrywa błędy. Ta metoda nie działa dla UDP.

  5. Python: Użycie socketów do sprawdzenia.

    import socket
    
    def check_port(host, port):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(1)  # Ustaw timeout
        try:
            s.connect((host, port))
            print(f"Port {port} na {host} jest otwarty")
        except (socket.timeout, ConnectionRefusedError):
            print(f"Port {port} na {host} jest zamknięty lub filtrowany")
        finally:
            s.close()
    
    # Przykład użycia
    check_port("localhost", 80)       # Sprawdzenie lokalnego hosta
    check_port("google.com", 443)  # Sprawdzenie zdalnego hosta
    

Wybór metody zależy od dostępnych narzędzi, systemu operacyjnego i specyfiki zadania. netcat i nmap są jednymi z najbardziej elastycznych i informacyjnych narzędzi.