Saya mencoba untuk mendapatkan gateway default, menggunakan tujuan 0.0.0.0
saya menggunakan perintah ini: netstat -rn | grep 0.0.0.0
dan mengembalikan daftar ini:
Destination - Gateway - Genmask - Flags - MSS - Window - irtt - Iface
10.9.9.17 - 0.0.0.0 - 255.255.255.255 - UH - 0 0 0 - tun0
133.88.0.0 - 0.0.0.0 - 255.255.0.0 - U - 0 0 0 - eth0
0.0.0.0 - 133.88.31.70 - 0.0.0.0 - UG - 0 0 0 - eth0
Tujuan saya di sini adalah melakukan ping ke gateway default menggunakan tujuan 0.0.0.0; dengan demikian, itu adalah "133.88.31.70"; tetapi yang ini mengembalikan daftar karena menggunakan 'grep'.
Pertanyaannya adalah: Bagaimana cara saya mendapatkan gateway default saja? Saya akan membutuhkannya untuk skrip bash saya untuk mengidentifikasi apakah koneksi internet sudah aktif atau tidak.
ip
luar sana. Sebenarnyaip route show
adalah alias untukip route list
dan Anda dapat memeriksaman ip
untuk melihat bahwa sub-perintah ini memiliki sintaksisip route { list | flush } SELECTOR
... Dan tidak satu pun dari pemilih yang valid yang terdaftar adalahdefault
. Saya merasa sepertiip route show table default
harus melakukan apa yang kita inginkan, tetapi sayangnya, tidak. Bagi orang lain, cocokkan juga dengan awal kalimat (Anda telah diperingatkan):ip route show | awk '/^default/{print $3}'
Perintah ini jauh lebih cepat daripada
ip route | grep
default pada sistem dengan banyak (10.000+) ruteLihat misalnya dari router saya dengan BGP lengkap dan rute default manual sebagai cadangan
ip route show default show
semua rute untuk saya bukan hanya rute standarip route get
tidak menerima default atau 0.0.0.0/0 sebagai parametersumber
ip route show default
harus melakukan trik untuk gateway default, atau Anda dapat menggunakanip route get <someip>
untuk melihat apa rute untuk alamat IP tertentu.sumber
Jika Anda ingin melakukan ini menggunakan
netstat
(jadi itu akan bekerja pada sesuatu yang BUKAN Linux ) solusi umum adalah:netstat -rn | grep '^\(default\|0\.0\.0\.0\)' | awk '{print $2}'
Ini menunjukkan tabel routing, menggunakan IP daripada menyelesaikan nama host (
netstat -rn
),mencari gateway default (baris dimulai dengan
0.0.0.0
ataudefault
),dan mencetak host gateway (bidang kedua hasil).
Proliferasi
\
karakter dalam ekspresi reguler adalah signifikan:\(
dan\)
tentukan grup\|
adalah karakter pergantian (hal di kiri atau yang di kanan cocok)\.
- artinya karakter literal.
sebagai lawan dari Ekspresi Reguler.
(cocok dengan setiap karakter tunggal)sumber
grep -e
atauegrep
akan melakukan triknya tanpa perlu tanda kurung dan pipa untuk bisa lolosegrep '^(default|0\.0\.0\.0)'
Beginilah cara saya melakukannya:
sumber
Apakah di sini
sumber
grep default
ketika Anda sudah menentukandefault
rute dalamip
perintah Anda ?Cara yang SANGAT mudah ... tanyakan tabel routing bagaimana cara mendapatkan IP di luar jaringannya
Google DNS == 8.8.8.8
ip route dapatkan 8.8.8.8
sumber
atau
atau
atau
atau
Jika saya memahaminya dengan benar, pencarian gateway default untuk rute yang tepat itu - rute semua-nol - adalah 0.0.0.0/0.0.0.0 (atau 0/0) untuk IPv4 atau 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000 : 0000: 0000 (atau: :) untuk IPv6.
Namun (!), Tanpa menentukan AF yang ingin Anda gunakan (-4 atau -6 atau -f inet atau -f inet6), atau menentukan rute semua-nol sebagai awalan IPv4 atau IPv6 (0/0 menyiratkan IPv4) , tidak dapat mengetahui apa 'default' itu ...
Secara pribadi, saya tidak merasa halaman manual sangat jelas tentang ini, tapi itu hanya dua sen saya.
sumber