Saya mengetahui metode di mana Anda dapat menjalankan Bash for
loop dan ping
beberapa server, apakah ada alat Linux CLI yang dapat saya gunakan yang akan memungkinkan saya untuk melakukan ini tanpa harus menggunakan untuk menulis skrip Bash ke ping
daftar server satu per satu?
Sesuatu seperti ini:
$ ping host1 host2 host3
CATATAN: Saya mencari secara khusus untuk CentOS / Fedora, tetapi jika itu bekerja pada distro lain juga baik-baik saja.
networking
ping
icmp
slm
sumber
sumber
Jawaban:
Jika Anda melihat ke dalam proyek NMAP Anda akan menemukan bahwa itu termasuk alat tambahan selain dari adil
nmap
. Salah satu alat ini adalahnping
, yang mencakup kemampuan berikut:nping
ada dalam repo EPEL standar untuk boot.Pemakaian
Untuk melakukan ping ke beberapa server, Anda hanya perlu memberi tahu
nping
nama / IP dan protokol mana yang ingin Anda gunakan. Di sini karena kami ingin meniru apa yangping
CLI tradisional lakukan, kami akan menggunakan ICMP.Satu-satunya kelemahan yang saya temukan dengan alat ini adalah penggunaan mode ICMP yang membutuhkan hak akses root.
sumber
nmap
juga mendukung ICMP secara langsung dengan menentukan opsi-sn
. Lihat jawaban saya untuk detailnya.fping ada dalam paket Fedora dengan nama yang sama, dan memungkinkan banyak host, atau satu set alamat ip.
sumber
Deskripsi:
sumber
Saya sarankan menggunakan GNU Parallel
output akan disisipkan
sumber
Saya tahu secara spesifik bukan apa yang Anda minta, tetapi skrip bash untuk mencapai ini:
Ini akan mengambil titik akhir Anda sebagai argumen baris perintah dan mengirim ping 5 hitungan ke masing-masing sebagai proses latar belakang dan kemudian menunggu semua selesai sebelum keluar. Ini akan mencetak tiga baris terakhir dari hasil ping yang berisi statistik berguna tentang tingkat keberhasilan dan latensi.
sumber
wait
akan menunggu semua proses anak aktif, sehingga Anda dapat menghindari loop kedua. Saya pikir bagian dari alasan mengapa diminta untuk tidak memerlukan penulisan skrip bash adalah untuk memiliki solusi yang bekerja pada mesin apa pun tanpa harus membawa atau menulis skrip. Menyingkatnya tampaknya lebih menguntungkan, jadi saya pikir lebih baik untuk menghindari penugasan argumen itu dan lakukan sajafor host; do
di loop pertama Anda. Jika ini zsh, Anda dapat menghindarido
dandone
dan hanya melakukannya, secara interatif:for host in google.com; ping -c5 "$host" |& tail -3 & wait
command &
) dalam subkulit (yaitu pembungkus dengan parens) dan denganwait
menggabungkan sejumlah perintah ke dalam satu perintah buatan, misalnya:(for f in google.com yahoo.com microsoft.com; do ping $f & done; wait)
. Keluaran mereka akan disisipkan, dan ketika Anda ctrl + c ini setelah perintah ini, ketiga proses anak akan dibunuh. Shell memiliki banyak konstruksi kontrol pekerjaan yang kuat dan ini adalah salah satunya.Saya kira ini bisa lakukan untuk Anda?
Itu mengambil keuntungan dari
printf
kemampuan untuk "auto-iterate" argumennya sambil menggunakan kembali format string pada setiap argumen.printf
Oleh karena itu di atas menghasilkan urutanping <hostname> &
string untuk setiap host yang disediakan sebagai argumen, dan mengumpankan urutan perintah tersebut melalui Substitusi Perintah keeval
perintah agar segera dieksekusi.printf
daneval
perintah adalah standar POSIX, serta Substitusi Perintah.Lampirkan seluruh perintah seperti itu dalam subkulit yang terdiri dari dan-ed
wait
seperti ini:memberikan kemampuan untuk menginterupsi segalanya sesuka hati dengan yang sederhana Ctrl+C.
Jika tidak, Anda dapat mengontrol setiap
ping
perintah secara tunggal melalui kontrol pekerjaan shell yang biasa.Jika shell Anda juga memiliki dukungan untuk Substitusi Proses, Anda juga dapat menggunakan yang berikut:
untuk beberapa karakter kurang untuk mengetik.
Intinya sama dengan untuk
eval
, tetapi mengumpankan urutanping
s ke perintah.
(aliassource
) melalui Proses Substitusi.sumber
Nmap mendukung pemindaian ping (ICMP) dan beberapa host:
nmap -sn -n 127.0.0.1 8.8.8.8
Anda juga dapat membuat file yang berisi semua IP target Anda (dipisahkan oleh spasi atau baris baru) yang disebut
targets.txt
. Lalu lari:nmap -sn -n -iL targets.txt
Opsi menjelaskan:
-sn
Ping Scan.-n
Nonaktifkan resolusi DNS.-iL
Masukkan nama file.Opsi menarik lainnya jika Anda ingin melakukan ping ke sejumlah besar target:
-T4
Tambah waktu untuk mengurangi durasi pemindaian.--min-parallelism 100
Meningkatkan jumlah probe paralel.-oG <file>
Tulis hasil pemindaian ke file dalam format Grepable.Tanpa membuat file
Ingatlah bahwa Anda juga dapat melupakan pembuatan file dan menggunakan a
-
untuk mengambil input dari salah satu pipa|
,, atau melalui metode tradisional untuk mengarahkan output melalui STDIN.Contoh:
-atau-
-atau-
Referensi
sumber
Dengan menggunakan
xargs
perintah umum untuk membangun menjalankan beberapaping
permintaan:Di mana
host1 host2 host3
bisa sejumlah variabel host (kombinasi IP atau nama host).Ini mengubah
xargs
default untuk memaksa 1 argumen input per eksekusi ping, dan memungkinkan proses anak paralel yang tidak terbatas (1 per host ping). Mungkin bijaksana untuk mengatur-P
(alias--max-procs
) ke nilai waras jika bermaksud melakukan ping sejumlah besar host (mereka semua akan diproses; hanya lebih sedikit secara bersamaan).Cukup pendek untuk digunakan secara langsung, dapat ditambahkan sebagai fungsi ke profil shell atau file rc, atau diubah menjadi skrip kecil di blog Anda
$PATH
. Dalam contoh di bawah ini,-P
telah diatur ke 10 untuk menghindari konsumsi sumber daya yang berlebihan.Contoh skrip:
/usr/bin/mping
Contoh fungsi di dalam
~/.bashrc
Dan gunakan sebagai:
sumber
--max-procs
/-P
. Namun, untuk penghitungan host kurang dari-P
, semua ping dieksekusi secara paralel - yang berarti bahwa itu akan memakan waktu selama eksekusi ping terpanjang tunggal, daripada jumlah semuanya.Saya tidak tahu persis apa yang Anda inginkan tetapi Anda dapat mengubah 8 bit terakhir yang ditetapkan ke dalam desimal 255, sehingga host Anda akan menerima siaran, sebenarnya, ia akan mengirimkan paket ping ke semua perangkat yang ada di jaringan.
sumber
Keluaran
sumber
&&
operator hanya mengizinkan perintah kedua untuk dijalankan jika perintah pertama selesai dengan sukses, (yaitu kode keluar 0) Dan 2) ping pertama tidak akan pernah berakhir tanpa ^ C untuk menghentikannya. Pertimbangkan untuk menambahkan parameter -c dan -w. Selamat datang di situs ini!Hanya untuk bersenang-senang dan untung ...
Ini bisa dengan mudah ditingkatkan. Yang membuatnya cukup bermanfaat. :)
Untuk opsi tambahan, lihat halaman manual untuk bsd ping dan Linux ping
HTH
EDIT: sedikit diperbarui untuk mengakhiri ping ping masing-masing @ 6 ping, dan menambahkan opsi halaman manual.
sumber
ping
Panggilan pertama tidak pernah kembali kecuali jika ada kesalahan fatal.Gunakan perintah sederhana di bawah ini:
sumber