Sobes.tech
Junior

Kako proveriti da li je port otvoren na udaljenom ili lokalnom hostu?

sobes.tech АИ

Одговор од АИ

Za proveru otvorenog porta na udaljenom ili lokalnom hostu možete koristiti sledeće načine:

  1. netcat (nc): Univerzalni alat za rad sa mrežnim konekcijama.

    • Lokalni host:
      nc -zv localhost <port>
      
    • Udaljeni host:
      nc -zv <udaljeni_host> <port>
      

    Opcije -z (zero-I/O mode) i -v (verbose) se koriste za skeniranje bez slanja podataka i za prikaz detalja.

  2. telnet: Protokol za udaljeno upravljanje, koji se može koristiti za proveru veze na datom portu.

    • Lokalni host:
      telnet localhost <port>
      
    • Udaljeni host:
      telnet <udaljeni_host> <port>
      

    Ako se veza uspostavi (obično se pojavljuje poziv ili prazan red), port je otvoren. Može se zatvoriti pritiskom na Ctrl+], zatim quit i Enter.

  3. nmap: Moćan skener portova. Zahteva instalaciju.

    • Lokalni host:
      nmap -p <port> localhost
      
    • Udaljeni host:
      nmap -p <port> <udaljeni_host>
      

    Izlaz će prikazati status porta: open, closed ili filtered.

  4. < /dev/tcp ili < /dev/udp (u Bash): U Bash-u se mogu koristiti fajl deskriptori za kreiranje TCP ili UDP veza.

    • Lokalni host (TCP):
      timeout 1 bash -c "cat < /dev/tcp/localhost/<port>" 2>/dev/null && echo "Port <port> is open" || echo "Port <port> is closed"
      
    • Udaljeni host (TCP):
      timeout 1 bash -c "cat < /dev/tcp/<udaljeni_host>/<port>" 2>/dev/null && echo "Port <port> is open" || echo "Port <port> is closed"
      

    timeout se koristi za sprečavanje zaglavljivanja, ako je port zatvoren. 2>/dev/null skriva greške. Ovaj metod ne radi za UDP.

  5. Python: Korišćenje soketa za proveru.

    import socket
    
    def check_port(host, port):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(1)  # Postavljanje timeout-a
        try:
            s.connect((host, port))
            print(f"Port {port} on {host} je otvoren")
        except (socket.timeout, ConnectionRefusedError):
            print(f"Port {port} on {host} je zatvoren ili filtriran")
        finally:
            s.close()
    
    # Primer korišćenja
    check_port("localhost", 80)       # Provera lokalnog hosta
    check_port("google.com", 443)  # Provera udaljenog hosta
    

Izbor metode zavisi od dostupnih alata, operativnog sistema i specifičnosti zadatka. netcat i nmap su među najfleksibilnijim i najinformativnijim alatima.