GNU/Linux >> Linux Esercitazione >  >> Linux

Testare in modo efficiente se una porta è aperta su Linux?

Una sorpresa che ho scoperto di recente è che Bash supporta nativamente le connessioni tcp come descrittori di file. Per utilizzare:

exec 6<>/dev/tcp/ip.addr.of.server/445
echo -e "GET / HTTP/1.0\n" >&6
cat <&6

Sto usando 6 come descrittore di file perché 0,1,2 sono stdin, stdout e stderr. 5 è talvolta usato da Bash per i processi figlio, quindi 3,4,6,7,8 e 9 dovrebbero essere sicuri.

Come da commento qui sotto, per testare l'ascolto su un server locale in uno script:

exec 6<>/dev/tcp/127.0.0.1/445 || echo "No one is listening!"
exec 6>&- # close output connection
exec 6<&- # close input connection

Per determinare se qualcuno sta ascoltando, prova a connetterti tramite loopback. Se fallisce, la porta è chiusa o non ci è consentito l'accesso. Successivamente, chiudi la connessione.

Modificalo per il tuo caso d'uso, come l'invio di un'e-mail, l'uscita dallo script in caso di errore o l'avvio del servizio richiesto.


C'è un brevissimo con "risposta veloce" qui:Come verificare se la porta TCP remota è aperta dallo script Shell?

nc -z <host> <port>; echo $?

Lo uso con 127.0.0.1 come indirizzo "remoto".

questo restituisce "0" se la porta è aperta e "1" se la porta è chiusa

ad esempio

nc -z 127.0.0.1 80; echo $?

-z Specifica che nc deve cercare i demoni in ascolto, senza inviare loro alcun dato. È un errore usare questa opzione insieme all'opzione -l.


Puoi utilizzare netstat in questo modo per ottenere risultati molto più rapidi:

Su Linux:

netstat -lnt | awk '$6 == "LISTEN" && $4 ~ /\.445$/'

Su Mac:

netstat -anp tcp | awk '$6 == "LISTEN" && $4 ~ /\.445$/'

Questo produrrà un elenco di processi in ascolto sulla porta (445 in questo esempio) o non produrrà nulla se la porta è libera.


Puoi usare netcat per questo.

nc ip port < /dev/null

si connette al server e chiude di nuovo direttamente la connessione. Se netcat non è in grado di connettersi, restituisce un codice di uscita diverso da zero. Il codice di uscita è memorizzato nella variabile $?. Ad esempio,

nc ip port < /dev/null; echo $?

restituirà 0 se e solo se netcat può connettersi correttamente alla porta.


Linux
  1. Telnet su una porta per testare la connettività di rete

  2. Come testare la connettività della porta [TCP/UDP] da un server Linux

  3. Come aprire la porta in Linux

  4. Controlla se la porta è aperta o chiusa su un server Linux?

  5. Esaurimento della porta di rete di Linux

Come trovare e chiudere le porte aperte in Linux

Come utilizzare Netcat per scansionare le porte aperte in Linux

Come eseguire il ping di un numero di porta in Linux

Come aprire un PDF in un terminale Linux

Apertura di una porta su Linux

Tutti i modi per verificare se una porta è aperta in Linux