Bagaimana saya bisa membuat ping Linux untuk menunjukkan permintaan 'time out' alih-alih menghilangkan output?
Sama seperti ping versi Windows.
linux
networking
ping
Andre
sumber
sumber
Jawaban:
fping tidak bekerja untuk saya ... Dalam kasus saya, sebagian besar waktu saya ingin melihat ini pada dasarnya selama server reboot ... ini bekerja cukup bagus di Windows ...
Saya membuat skrip sederhana (memperluas @entropo answer) untuk membantu saya mengenai hal itu, yang dapat membantu menjawab pertanyaan ini:
https://gist.github.com/brunobraga/7259197
Dan penggunaannya adalah seperti:
sumber
Hal terbaik yang saya temukan adalah menggunakan flag -O (Perhatikan bahwa itu tidak bekerja pada semua distro - menggunakan Linux Mint 17.1 Rebecca IPUTILS-PING 3: 20121221-4ubuntu1.1)
Dari halaman manual:
-O Report outstanding ICMP ECHO reply before sending next packet. This is useful together with the timestamp -D to log output to a diagnostic file and search for missing answers.
sumber
ping
; pada Debian Wheezy saya mendapat "ping: invalid option -- 'O'
", tetapi pada Jessie itu berfungsi seperti yang Anda perhatikan. Anda mungkin ingin memperbarui jawaban Anda untuk memasukkan informasi ini. (Saya juga telah mengirimkan edit yang disarankan untuk menggunakan teks yang sudah diformat untuk output dan info dari halaman manual)Ketika saya menggunakan ping untuk melihat apakah ada host di skrip shell, saya melakukan sesuatu seperti ini:
ping -W 1 -c 1 $HOST 2>&1 > /dev/null || (echo -n "dead!"; false) && command-that-needs-host-to-be-up
Pada dasarnya, kirim satu ICMP yang habis dalam satu detik tanpa output dan gunakan kode keluar untuk melakukan tindakan selanjutnya.
sumber
Tidak ada cara bagi umum
ping
untuk melakukan itu. Jika Anda mencoba membuat skrip sesuatu, Anda memiliki beberapa opsi:Jika ping gagal,
$?
akan menjadi 1, jika ping berhasil,$?
akan menjadi 0.Opsi lainnya adalah menggunakan
fping
yang banyak berfungsi seperti Ciscoping
:sumber
Script di atas oleh bruno.braga berfungsi dengan baik, namun secara pribadi saya lebih suka menggunakan alias dalam profil shell (seperti .bashrc) sehingga bisa menjadi kasus penggunaan sehari-hari.
Solusi saya di bawah ini juga menghitung nomor urut Permintaan ECHO secara otomatis:
Ini adalah contoh output ketika host tidak stabil dengan batas waktu:
Tentu saja, kelemahannya adalah: tidak ada statistik pada akhirnya ketika CTRL-C ditekan. Jika diinginkan, itu juga mungkin untuk menghitung skrip shell min / avg / max, mdev jauh di luar cakupan.
sumber
Saya takut tetapi tidak ada solusi 100% untuk itu dengan ping standar. Bahkan dengan ping -v untuk ping keluaran verbose akan diam jika terjadi timeout. Anda dapat mencoba menggunakan:
Ini akan berhenti ping setelah 2 detik dan kemudian menunjukkan jumlah paket yang dikirimkan dan kehilangan paket. Pilihan lain adalah menggunakan mtr .
sumber
sumber
fping
baik, dan BTW-e
itu tidak perlu ketika-l
atau-c
ditambahkan, bisa saja digunakanfping -l 8.8.8.8
, hasilnya sama.Saya sangat suka skrip shell dari Bruno. Saya menambahkan baris untuk membuat file dengan semua kegagalan.
echo -e "
date +'%Y/%m/%d %H:%M:%S'
- host $ host adalah \ 033 [0; 31mdown \ 033 [0m" >> ./lostpackets.txtsumber
Tanpa skrip apa pun
ping -f -i 1 hostname
Keuntungan : perintah Linux standar - tidak ada yang menginstal atau skrip.
Kekurangan :
Dengan skrip minimal
Kekurangan : Anda tidak mendapatkan statistik pada akhirnya dan Anda tidak dapat menggunakan 3 opsi ping ini:
-i
untuk mengubah interval antara pengiriman paket (hardcoded ke 1detik)-W
untuk mengubah batas waktu (hardcode ke 1detik)-c
untuk berhenti setelah mengirim paket NBTW: Ini adalah salah satu contoh fungsionalitas yang sangat langka yang sangat saya lewatkan dari alat Linux CLI tetapi saya temukan di alat windows. Eksekusi yang membuktikan aturan seperti yang mereka katakan :-)
sumber
Jika Anda ingin melakukan ping terus menerus seperti windows dan dengan timestamp, gunakan yang ini. Jangan ragu untuk mengganti
192.168.0.1
dengan Alamat IP Anda sendiriContoh Balas OK
Permintaan Contoh habis waktu
sumber
Ping yang normal benar-benar menunjukkan batas waktu. Dengan melihat seq = nilai antar ping, Anda dapat mengetahui berapa banyak timeout
EG 3 waktu habis terjadi antara 2 ping di atas sejak yang pertama
seq=8
dan yang keduaseq=11
(9 dan 10 adalah waktu habis)seq=sequence
.sumber