Bagaimana cara menampilkan ping gagal?

24

Ketika kita menggunakan ping windows, itu akan menampilkan ping yang gagal. Apakah Ubuntu memiliki fungsi serupa?

Ping yang gagal cukup berguna saat men-debug jaringan. Bagaimana kalian memecahkan ini? Yah, saya hanya ingin solusi sederhana, saya tidak ingin mendapatkan skrip yang panjang.

王子 1986
sumber
2
Bisakah Anda memberikan contoh output atau tangkapan layar untuk melengkapi pertanyaan?
hijau
1
Apakah Anda mencari atau informasi lebih rinci dari 5 packets transmitted, 0 received, 100% packet loss, time 4032ms(informasi seperti itu dicetak ketika ping berakhir, apakah dengan sendirinya atau dengan Ctrl + C)? Apakah Anda mencari data terpisah tentang setiap ping individu?
Eliah Kagan
1
Linux luar biasa dan kita semua di sini menyukainya karena berbagai alasan, tetapi ... hei, kadang-kadang Windows melakukannya dengan benar dan Linux salah. Ya, bahkan dalam alat CLI dasar. Ya, bahkan di alat jaringan dasar CLI! Jika tidak ada cara mudah untuk mendapatkan pesan di layar saat ada masalah, maka kita harus mengakuinya sebagai "fitur yang kami lewatkan". Kami tentu saja tidak ingin berpura-pura itu sesuatu yang begitu rumit sehingga kami tidak dapat mencari tahu apa sebenarnya yang diminta OP (terutama ketika fitur dihidupkan secara default di beberapa juta kotak di sekitar kami).
ndemou
Saya berani bersumpah bahwa fitur ini hadir di ping linux sebelumnya. Ini hadir di MacOS juga (yang dibangun di atas unix). Itu di luar saya mengapa tidak ada di sana. Saya memiliki garis yang bekerja sebentar-sebentar dan untuk mengetahui berapa lama pemadaman yang saya butuhkan untuk menyaring output mencari lompatan, daripada memiliki garis yang jelas berbeda.
Silvio Levy

Jawaban:

26

Jawaban yang benar adalah: tidak ada yang namanya " gagal kehilangan ping". (Balasan gagal seperti "Destination unreachable" selalu dicetak, berbeda dari tidak ada jawaban sama sekali.)

Utilitas Ping mencetak setiap balasan yang diterima, bahkan jika itu sebelumnya memutuskan bahwa ping spesifik ini hilang. Sangat mungkin untuk menerima balasan yang rusak.

Bahkan di ponsel Android saya, utilitas stock ping mendukung 2 opsi ini:
-D mencetak stempel waktu sebelum setiap pesan
-O mencetak pesan ketika balasan tidak diterima tepat waktu, dan itu lebih atau kurang dari yang diminta .
Namun, opsi ini sepertinya tidak didukung di mana-mana (mis. Debian Wheezy tidak memilikinya sejauh yang saya tahu, sementara Jessie memilikinya. busybox pingTidak mendukung mereka).

Berikut adalah contoh output yang berhasil saya dapatkan (balasan ping yang tidak penting dilewati):

u0_a93@NX505J:/ $ ping -D -O 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
[1440545014.805478] 64 bytes from 8.8.8.8: icmp_seq=1 ttl=244 time=116 ms
~~~~~~~~~~
[1440545142.995443] 64 bytes from 8.8.8.8: icmp_seq=129 ttl=244 time=110 ms
[1440545144.885601] no answer yet for icmp_seq=130
[1440545145.455485] 64 bytes from 8.8.8.8: icmp_seq=131 ttl=244 time=568 ms
[1440545145.455780] 64 bytes from 8.8.8.8: icmp_seq=130 ttl=244 time=1569 ms
[1440545146.005850] 64 bytes from 8.8.8.8: icmp_seq=132 ttl=244 time=119 ms
~~~~~~~~~~
[1440545254.055962] 64 bytes from 8.8.8.8: icmp_seq=240 ttl=244 time=115 ms
^C
--- 8.8.8.8 ping statistics ---
240 packets transmitted, 240 received, 0% packet loss, time 239250ms
rtt min/avg/max/mdev = 109.062/138.757/1569.620/101.608 ms, pipe 2

Perhatikan bagaimana # 130 pertama kali dilaporkan hilang, kemudian diterima setelah # 131, dan akhirnya paket loss dilaporkan nol.


Catatan tambahan tentang Windows:

Di Windows, ping sepertinya menunggu balasan lebih lama dan kemudian menyatakannya hilang dan mengabaikannya jika datang nanti.

Secara default, interval adalah 1 detik dan batas waktu adalah 4 detik, jadi:
Pada RTT rendah, ping akan dikirim dengan interval 1 detik.
Pada RTT> 4, ping akan dikirim dengan interval 4 detik (atau 5, tidak yakin) dan semua akan dilaporkan gagal, sama seperti jika server tidak merespons.

EvgEnZh
sumber
1
+1 untuk -Oopsi, hadir dan berfungsi dengan baik di Ubuntu trusty (& Linux Mint 17.2) dari paket iputils-ping versi 3: 20121221-4ubuntu1.1
Xen2050
11

Keluar sebagian dari jawaban oleh EvgEnZh, tetapi dengan versi saya sendiri:

ping -O -q 8.8.8.8

Itu membuatnya mencetak pesan ketika balasan terlalu lama atau tidak pernah kembali ( -O) dan menekan pesan ketika mereka kembali ( -q). Hasilnya adalah Anda hanya mendapatkan output ketika paket hilang. Ini dapat membuat menemukan masalah yang terputus-putus menjadi lebih mudah dengan membuatnya sehingga Anda tidak perlu menyaring tumpukan pesan "berhasil" untuk beberapa tempat yang rusak.

Azendale
sumber
Perhatikan bahwa -O hanya memicu berarti latensi lebih tinggi dari yang diharapkan. Itu sering menunjukkan masalah nyata, tetapi tidak selalu. Log yang saya poskan dalam jawaban saya diperoleh pada koneksi GPRS yang lemah, dan meskipun dalam lebih dari 2 menit saya hanya menangkap satu kali balasan yang tidak sesuai pesanan, ada banyak balasan yang masuk "terlambat". Koneksi yang buruk menjadi kewalahan beberapa kali, melaporkan beberapa ping hilang berturut-turut, dan kemudian mereka semua masuk setelah beberapa detik. Koneksi masih dapat diandalkan (mungkin GPRS menangani pengiriman ulang secara internal, saya tidak tahu), hanya rasa sakit yang ekstrem untuk digunakan bahkan untuk akses SSH.
EvgEnZh
3

Mungkin ping -fcocok untuk Anda. Dari manual ping:

-f

Ping banjir. Untuk setiap ECHO_REQUEST mengirim periode ''. '' Dicetak, sedangkan ECHO_REPLY selamanya menerima backspace dicetak. Ini memberikan tampilan cepat tentang berapa banyak paket yang dijatuhkan. Jika interval tidak diberikan, ia menetapkan interval ke nol dan output paket secepat mereka kembali atau seratus kali per detik, mana yang lebih. Hanya pengguna super yang dapat menggunakan opsi ini dengan interval nol.

Untuk 1 echo_request setiap detik akan terlihat seperti ping -i 1 -f 8.8.8.8

Daniel Yuste Aroca
sumber
Tidak yakin itu fitur baru atau tidak, saya bisa melihat ping yang gagal.
王子 1986
Opsi mana yang Anda gunakan untuk melaporkan ping yang gagal? Pesan apa yang Anda dapatkan untuk ping yang gagal?
Daniel Yuste Aroca
Sementara saya hanya menggunakan ping, pesannya seperti ini $ ping 172.18.1.12 PING 172.18.1.12 (172.18.1.12) 56 (84) byte data. Dari 172.18.1.224 icmp_seq = 1 Host Tujuan Tidak Dapat Dicapai Dari 172.18.1.224 icmp_seq = 2 Host Host Tidak Terjangkau Dari 172.18.1.224 icmp_seq = 3 Host Host Tidak Dapat Dicapai
王子 1986
2
"Destination Host Unreachable" tidak sama dengan waktu tunggu ping
ndemou
ping -f bukan jawabannya, karena tidak meninggalkan catatan. Yang dibutuhkan adalah satu jenis garis untuk ping yang sukses dan dan yang berbeda untuk kegagalan, sehingga orang dapat segera memberi tahu (dalam situasi di mana layanan berselang) seberapa sering dan berapa lama pemadaman listrik.
Silvio Levy
0

Bahkan dengan opsi -v, ping jangan lakukan itu. Lihat pertanyaan ini . Tetapi jika ini benar-benar penting (atau menyenangkan) bagi Anda, Anda dapat mengunduh sumbernya, memodifikasi kode untuk menyertakan panggilan printf yang sesuai. Tempat yang bagus untuk itu adalah di akhir metode 'send_probe' (baris 619 pada 12.10) ...

Pertama, Anda mendapatkan sumbernya

apt-get source iputils
cd iputils*

Edit

gedit ping.c

Bangun, dan instal paket yang dihasilkan ...

apt-get install libsysfs-dev
dpkg-buildpackage
Resi
sumber
Saya ingin melakukan ini (dan membenarkan jawaban ini 10 kali) tetapi pasti ada sesuatu yang hilang. Saya bekerja di bawah sudo -s. Setelah mengedit ping.c, jika saya mencoba "membuat" Saya mendapatkan "kesalahan fatal: sys / kapabilitas.h: Tidak ada file seperti itu". Jika saya mengikuti dua baris berikutnya dalam jawaban (apt-get install dan dpkg -...) Saya tidak mendapatkan kesalahan tapi saya tidak tahu di mana executable ditempatkan. Eksekusi lama (/ bin / ping) masih ada - Saya tahu ini sudah lama dari timestamp dan karena tidak berlaku berbeda.
Silvio Levy
-1

Terima kasih atas semua jawabannya. Sepertinya ping ubuntu terbaru dapat menunjukkan ping gagal.

Terima kasih lagi.

王子 1986
sumber
1
Tidak itu tidak (sampai setidaknya 2015-Jan) "Host Host Unreachable" tidak sama dengan ping timeout
ndemou
Mengapa ini jawaban yang diterima? ping -O -q 8.8.8.8adalah cara untuk pergi.
theV0ID