Saya menggunakan -w 1
di bawah ini untuk membatasi waktu tunggu hingga 1 detik. Saya juga menggunakan -v
untuk alasan yang disebutkan dalam komentar. Saya menggunakan -n
untuk menolak penundaan pencarian DNS terbalik...
[[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] ~]$
Jika Anda menyukai GNU Parallel seperti saya, coba ini:
parallel nc -vz host ::: 22 80 443 8080
Contoh Keluaran:
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
Metode ini juga lebih cepat dalam beberapa kasus karena menguji koneksi ke port secara paralel, bukan serial. Secara khusus ini akan menjadi tempat host jarak jauh (atau firewall yang mengintervensi) membuang paket Anda agar tetap tersembunyi (berlawanan dengan koneksi yang berhasil atau penolakan paksa).
Kiat: di sebagian besar distro Linux, Anda dapat menginstal parallel
dari manajer paket Anda.
Perbarui: Dengan parallel
, ini menggeneralisasi dengan sangat baik untuk mencakup kasus banyak host x banyak port yang sering dibutuhkan. Contoh berikut menggunakan parallel
untuk mengulangi produk silang, jadi Anda tidak perlu menulis loop bersarang apa pun.
parallel nc -vz ::: host1 host2 host3 ::: 22 80 443 8080
Keluaran:
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
Sama seperti contoh sebelumnya, parallel
mengeksekusi tes koneksi secara paralel. Perhatikan, paralelisme default adalah berapa banyak utas yang dimiliki sistem Anda, tetapi dapat diganti dengan mudah dengan -j
beralih ke nilai apa pun. Anda dapat dengan mudah menggunakan parallel -j 50 ...
atau bahkan lebih tinggi karena menguji soket bukanlah tugas intensif CPU.