Bagaimana koneksi internet dapat diuji tanpa melakukan ping ke beberapa situs web? Maksud saya, bagaimana jika ada koneksi tetapi situsnya sedang down? Apakah ada pemeriksaan untuk koneksi dengan dunia?
bash
connection
ping
lauriys
sumber
sumber
Jawaban:
Tanpa ping
-q : Mode diam
--spider : jangan sampai, cukup periksa ketersediaan halaman
$? : kode pengembalian shell
0 : kode shell "Semua OK"
Tanpa wget
sumber
nc
memastikannya waktu habis. sesuatu sepertinc google.com 80 -w 10
Ping gateway default Anda:
sumber
function ping_gw() { ... && return 0 || return 1 }
dan kemudian digunakan seperti ini:ping_gw || (echo "no network, bye" && exit 1)
ifconfig down wlan0
dan saya masih memiliki gateway default dan itu dapat di-ping, meskipun saya sebenarnya tidak dapat menjangkau dunia luar.Super Terima kasih kepada pengguna somedrew untuk posting mereka di sini: https://bbs.archlinux.org/viewtopic.php?id=55485 pada 2008-09-20 02:09:48
Berikut skrip saya untuk menguji koneksi jaringan selain loop belakang. Saya menggunakan di bawah ini dalam skrip lain yang saya miliki untuk menguji secara berkala apakah situs web saya dapat diakses. Jika TIDAK dapat diakses, jendela popup memberi tahu saya akan adanya masalah.
Skrip di bawah ini mencegah saya menerima pesan popup setiap lima menit setiap kali laptop saya tidak terhubung ke jaringan.
Catatan bagi mereka yang baru mengenal bash: Pernyataan 'jika' terakhir menguji jika TIDAK [!] Online dan keluar jika ini masalahnya. Lihat man bash dan cari "Ekspresi dapat digabungkan" untuk detail selengkapnya.
PS Saya merasa ping bukanlah hal terbaik untuk digunakan di sini karena bertujuan untuk menguji koneksi ke host tertentu BUKAN menguji apakah ada koneksi ke jaringan apa pun.
PPS Di atas berfungsi di Ubuntu 12.04 / sys mungkin tidak ada di beberapa distro lain. Lihat di bawah:
sumber
cat /sys/class/net/wwan0/carrier
Tidak berfungsi di ubuntu 14.04 LTS.2>/dev/null
setelahcat /sys/class/net/$interface/carrier
tidak memiliki output kesalahan jika jaringan dinonaktifkan.Ini berfungsi di MacOSX dan Linux:
sumber
ping: invalid option -- w
)fping google.com
atau hanyafping 8.8.8.8
melakukan keajaiban dengan bonus Anda mendapatkan kode status tanpa perlu mengujinya ("google.com is alive
") ...Di Bash, menggunakan pembungkus jaringannya melalui / dev / { udp , tcp } / host / port :
(
:
adalah Bash no-op, karena Anda hanya ingin menguji koneksi, tetapi tidak memproses.)sumber
Saya telah menulis skrip sebelumnya yang cukup menggunakan telnet untuk terhubung ke port 80, lalu mengirimkan teks:
diikuti oleh dua urutan CR / LF.
Asalkan Anda mendapatkan kembali beberapa bentuk respons HTTP, Anda biasanya dapat menganggap situs tersebut berfungsi.
sumber
Jawaban teratas melewatkan fakta bahwa Anda dapat memiliki koneksi yang sangat stabil ke gateway default Anda, tetapi itu tidak secara otomatis berarti Anda benar-benar dapat menjangkau sesuatu di internet. OP bertanya bagaimana dia bisa menguji koneksi dengan dunia. Jadi saya sarankan untuk mengubah jawaban teratas dengan mengubah IP gateway ke IP yang dikenal (xyzw) yang ada di luar LAN Anda.
Jadi jawabannya adalah:
Juga menghapus backticks yang tidak disukai untuk substitusi perintah [1] .
Jika Anda hanya ingin memastikan Anda terhubung ke dunia sebelum menjalankan beberapa kode, Anda juga dapat menggunakan:
sumber
pastikan jaringan Anda mengizinkan lalu lintas TCP masuk dan keluar, lalu Anda bisa mendapatkan kembali IP yang menghadap publik dengan perintah berikut
sumber
Jalankan perintah berikut untuk memeriksa apakah situs web sudah aktif, dan pesan status apa yang ditampilkan server web:
$ curl -Is http://www.google.com |
head -1 HTTP/1.1 200 OK
Kode status '200 OK' berarti permintaan berhasil dan situs web dapat dijangkau.
sumber
curl -Is http://www.google.com | head -1 | grep 200; if [[ $? -eq 0 ]]; then; echo "Online"; else; echo "Offline"; fi;
Jika server nama lokal Anda tidak aktif,
adalah IP selalu up yang mudah diingat (bahkan sebenarnya server nama).
sumber
Jawaban pilihan teratas tidak berfungsi untuk MacOS, jadi bagi mereka yang menggunakan mac, saya berhasil menguji ini:
diuji pada MacOS High Sierra 10.12.6
sumber
route
perintah untukroute -n get default 2> /dev/null | grep gateway
menghindari penulisan kesalahan ke stderr saat offline.Skrip bash ini terus menerus memeriksa Internet dan mengeluarkan bunyi bip saat Internet tersedia.
sumber
cara terpendek:
fping 4.2.2.1
=> "4.2.2.1 masih hidup"Saya lebih suka ini karena lebih cepat dan output yang kurang bertele-tele daripada
ping
, downside adalah Anda harus menginstalnya.Anda dapat menggunakan dns publik apa pun daripada situs web tertentu.
fping -q google.com && echo "do something because you're connected!"
-q
mengembalikan kode keluar, jadi saya hanya menunjukkan contoh menjalankan sesuatu yang Anda sedang online.untuk menginstal di mac:
brew install fping
; di ubuntu:sudo apt-get install fping
sumber
Ping dirancang untuk melakukan apa yang ingin Anda lakukan. Namun, jika situs memblokir echo ICMP, maka Anda selalu dapat melakukan telnet ke port 80 dari beberapa situs, wget, atau curl.
sumber
Memeriksa halaman indeks Google adalah cara lain untuk melakukannya:
sumber
Mirip dengan jawaban @ Jesse , opsi ini mungkin jauh lebih cepat daripada solusi apa pun yang digunakan
ping
dan mungkin sedikit lebih efisien daripada jawaban @ Jesse .Penjelasan:
Perintah ini menggunakan
find
dengan-exec
untuk menjalankan perintah pada semua file yang tidak dinamai*lo*
dalam/sys/class/net/
. Ini harus berupa tautan ke direktori yang berisi informasi tentang antarmuka jaringan yang tersedia di mesin Anda.Perintah yang sedang dijalankan adalah
sh
perintah yang memeriksa konten filecarrier
di direktori tersebut. Nilai$interface/carrier
memiliki 3 arti - Mengutip :Opsi pertama tidak diperhatikan dalam jawaban @ Jesse . The
sh
perintah bergaris out adalah:cat
sedang digunakan untuk memeriksa kontencarrier
dan mengarahkan semua keluaran ke keluaran standar meskipun gagal karena berkas tidak dapat dibaca. Jikagrep -q
ditemukan di"1"
antara file-file tersebut, berarti setidaknya ada 1 antarmuka yang terhubung. Kode keluar darigrep -q
akan menjadi kode keluar terakhir.Pemakaian
Misalnya, menggunakan status exit perintah ini, Anda dapat menggunakannya memulai gnubiff di Anda
~/.xprofile
hanya jika Anda memiliki koneksi internet.Referensi
/sys/class/net/
sumber
Pong tidak berarti layanan web di server sedang berjalan; itu hanya berarti bahwa server membalas echo ICMP. Saya akan merekomendasikan menggunakan curl dan memeriksa nilai kembaliannya.
sumber
Jika tujuan Anda adalah untuk benar-benar memeriksa akses Internet , banyak dari jawaban yang ada untuk pertanyaan ini yang cacat. Beberapa hal yang harus Anda perhatikan:
Dengan pemikiran tersebut, saya yakin strategi terbaik adalah menghubungi beberapa situs melalui koneksi HTTPS dan mengembalikan true jika salah satu situs tersebut merespons.
Sebagai contoh:
Pemakaian:
Beberapa catatan tentang pendekatan ini:
sumber
if wait $pid;
. Tidak tahu mengapa itu tidak berfungsi di sistem Anda. Apakah Anda yakin Anda menggunakan bash?wait
dan sekarang memahami kode pengembalian memang sedang diuji. Saya menyalin ulang kode Anda dan hari ini berhasil - ups! Saya pasti telah mengacaukan sesuatu terakhir kali meskipun saya tidak mengerti apa atau bagaimana. Meski begitu, mea culpa. Permintaan maaf.Dengan perintah ini:
.
sumber
Ini terutama lebih cepat daripada solusi apa pun yang diposting di sini, dan dapat digunakan untuk menguji host tertentu juga.
Triknya adalah menyelesaikan IP menggunakan pemecah DNS yang tidak terlalu sibuk daripada yang digunakan oleh
ping
:sumber