GNU/Linux >> Linux Esercitazione >  >> Linux

Esame di più porte durante l'esecuzione di NetCat (nc)

Sto usando -w 1 di seguito per limitare i timeout a 1 secondo. Uso anche -v per i motivi citati nei commenti. Ho usato -n rifiutare i ritardi per le ricerche DNS inverse...

[[email protected] ~]$ for i in $(echo "172.16.1.1,172.16.1.5"|tr "," "\n"); do echo -e "22\n80\n443\n8080" | xargs -i nc -w 1 -zvn $i {}; done
(UNKNOWN) [172.16.1.1] 22 (ssh) open
(UNKNOWN) [172.16.1.1] 80 (www) : Connection timed out
(UNKNOWN) [172.16.1.1] 443 (https) open
(UNKNOWN) [172.16.1.1] 8080 (http-alt) : Connection timed out
(UNKNOWN) [172.16.1.5] 22 (ssh) open
(UNKNOWN) [172.16.1.5] 80 (www) open
(UNKNOWN) [172.16.1.5] 443 (https) open
(UNKNOWN) [172.16.1.5] 8080 (http-alt) : Connection refused
[[email protected] ~]$

Se ti piace GNU Parallel tanto quanto me, prova questo:

parallel nc -vz host ::: 22 80 443 8080

Esempio di output:

Connection to foo.example.com 22 port [tcp/ssh] succeeded!
nc: connect to foo.example.com port 80 (tcp) failed: Connection refused
nc: connect to foo.example.com port 443 (tcp) failed: Connection refused
nc: connect to foo.example.com port 8080 (tcp) failed: Connection refused

Questo metodo è anche più veloce in alcuni casi poiché sta testando la connessione alle porte in parallelo, non seriale. Nello specifico, questo sarebbe il punto in cui l'host remoto (o il firewall intervenuto) scarta i tuoi pacchetti per rimanere nascosti (al contrario di una connessione riuscita o di un rifiuto forzato).

Suggerimento: nella maggior parte delle distribuzioni Linux, puoi installare parallel dal tuo gestore di pacchetti.

Aggiornamento: Con parallel , questo si generalizza molto bene per coprire un caso spesso necessario di più host x più porte. L'esempio seguente utilizza parallel per iterare sul prodotto incrociato, quindi non è necessario scrivere alcun ciclo nidificato.

parallel nc -vz ::: host1 host2 host3 ::: 22 80 443 8080

Uscita:

Connection to host1 22 port [tcp/ssh] succeeded!
Connection to host1 80 port [tcp/http] succeeded!
Connection to host1 443 port [tcp/https] succeeded!
nc: connect to host1 port 8080 (tcp) failed: Connection refused
Connection to host2 22 port [tcp/ssh] succeeded!
nc: connect to host2 port 80 (tcp) failed: Connection refused
nc: connect to host2 port 443 (tcp) failed: Connection refused
nc: connect to host2 port 8080 (tcp) failed: Connection refused
Connection to host3 22 port [tcp/ssh] succeeded!
nc: connect to host3 port 80 (tcp) failed: Connection refused
nc: connect to host3 port 8080 (tcp) failed: Connection refused
nc: connect to host3 port 443 (tcp) failed: Connection refused

Proprio come l'esempio precedente, parallel esegue i test di connessione in parallelo. Nota, il parallelismo predefinito è quanti thread ha il tuo sistema, ma può essere facilmente sovrascritto con -j passare a qualsiasi valore. Potresti cavartela facilmente con parallel -j 50 ... o anche superiore poiché il test dei socket non è un'attività che richiede molta CPU.


Linux
  1. 15 Spiegazione delle porte di rete comunemente utilizzate

  2. Come eseguire ssh su più porte

  3. Come chiudere rmiregistry in esecuzione su una determinata porta?

  4. Best practice per l'esecuzione di Node.js con la porta 80 (Ubuntu/Linode)

  5. Uccidi il processo in esecuzione sulla porta 80

14 porte di rete comuni che dovresti conoscere

Come eseguire una scansione delle porte in Linux

Come utilizzare Netcat per scansionare le porte aperte in Linux

.bash_profile non originato durante l'esecuzione di Su?

Apertura di una porta su Linux

Strano comportamento della cronologia di bash durante l'esecuzione di più sessioni