Jawaban:
Satu baris:
nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2
nm-tool | grep -i gateway | awk '{print $2}
netstat -nr | awk '$1 == "0.0.0.0"{print$2}'
arp -n | awk '{print $1}'
Catatan: hanya berfungsi jika mesin Anda adalah satu-satunya di jaringanip route show | grep -i 'default via'| awk '{print $3 }'
output: 192.168.0.1
untuk saya
CATATAN :
Untuk 15,04 dan yang lebih baru, tidak ada nm-tool
, jadi gunakan nmcli dev show <IFACE>
. Sebagai contoh,
$ nmcli dev show wlan7 | grep GATEWAY
IP4.GATEWAY: 192.168.0.1
IP6.GATEWAY:
Suntingan dan info tambahan
Seperti yang Anda lihat dari memeriksa perintah, kami mengambil output dari nm-tool
(yang, perhatikan, mengambil informasi dari NetworkManager), menemukan baris yang berisi kata gateway
, mencetak daripada informasi dengan gema (dipisahkan oleh spasi), dan kemudian memotong hanya item kedua dari keseluruhan itu keluaran. Perhatikan, bahwa jika Anda memiliki dua koneksi atau lebih di sana, Anda mungkin perlu menghapus xargs echo | cut -d' ' -f2
bagian atas , dan menggantinya dengan awk '{print $2}'
; dengan kata lain seluruh baris akan terlihat seperti ini nm-tool | grep -i gateway | awk '{print $2}'
. Atau Anda bisa menggunakan nm-tool | grep -oP '(?i)gateway:\s*\K\S+'
seperti yang diusulkan oleh Avinash Raj di komentar. Seperti yang Anda lihat tidak ada yang istimewa yang dilakukan di sini, dan seluruh cobaan di sini hanyalah latihan dalam menggunakan alat pengeditan keluaran seperti cut, awk, dan grep.
Metode lain untuk mendapatkan informasi gateway adalah melalui nmcli dev list
(ya, masih mengandalkan network manager) perintah. nmcli
adalah versi baris perintah dari manajer jaringan. Anda bisa berlari nmcli dev list | grep -i routers
atau berlari nmcli dev list | grep -i 'gw ='
. Sekali lagi, Anda dapat berolahraga dalam memotong semua info lain kecuali alamat ip yang diinginkan, jika Anda mau.
Karena dalam pertanyaan awal satu-satunya spesifikasi adalah untuk mencetak gateway default saja, saya mengandalkan output dari nm-tool di sini. NetworkManager hadir dengan Ubuntu secara default, ini adalah cara standar untuk mengelola koneksi jaringan Ubuntu. Jika Anda menggunakan sesuatu yang lain, seperti wicd atau terhubung melalui wpa_cli, nm-tool tidak akan memberi Anda jawaban. Dalam hal demikian, Anda mungkin menemukan jawaban orang lain di bawah ini lebih bermanfaat.
Opsi yang lebih distro-netral, dan config-neutral adalah menggunakan netstat -n
, yang menggunakan tabel routing kernel, mirip dengan route -n
. Keluarannya di bawah, tidak ada yang mengejutkan.
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 wlan0
192.168.0.0 0.0.0.0 255.255.255.0 U 9 0 0 wlan0
Dan inilah cara untuk memotong informasi yang Anda inginkan: netstat -nr | awk '$1 == "0.0.0.0"{print$2}'
Satu lagi, netral juga: arp -n | awk '{print $1}'
eth0
dan wlan0
, keduanya terhubung secara aktif tetapi dengan gateway yang hanya dikonfigurasikan wlan0
, nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2
output saja 0.0.0.0
. nm-tool | grep -oP '(?i)gateway:\s*\K\S+'
menghasilkan dua baris: 0.0.0.0
diikuti oleh 192.168.1.1
. (Cara ip route ...
dan route -n ...
menghasilkan adil 192.168.1.1
, yang saya anggap hasil yang paling diinginkan.)
network-manager
misalnya oleh ifupdown
atau ifconfig
..dalam kasus-kasus nm-tool
tersebut tidak akan menghasilkan output yang diinginkan..singkatnya jawaban ini hanya bergantung pada jaringan yang dikelola oleh network-manager
..
Anda dapat menemukannya dengan banyak cara
ip route show default
Pertanyaan yang lebih baik, apa atau bagaimana Anda ingin membentuk output?
ip route show | awk '/default/ {print $3}'
tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2}' | uniq
Dari komentar - (terima kasih Avinash Raj 0
tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
uniq
hanya tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
akan menjadi 5in.
Seperti yang biasanya Anda gunakan route -n
, Anda dapat mencoba sed
solusi ini ditambah dengan route -n
:
route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p'
Ini tesnya:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
192.168.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
$ route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p'
192.168.1.1
Cara lain adalah dengan menggunakan grep
:
$ route -n | tr -s ' ' | grep -Po "(?<=0\.0\.0\.0 )[^ ]+(?= 0\.0\.0\.0)"
192.168.1.1
Seperti yang ditunjukkan oleh @AvinashRaj ini hanya dapat dilakukan dengan menggunakan grep
(tidak perlu memeras spasi menggunakan tr
):
route -n | grep -Po "0\.0\.0\.0\s*\K\S+(?=\s*0\.0\.0\.0)"
192.168.1.1
tr
, grep sendiri akan melakukan pekerjaanroute -n | grep -Po "0\.0\.0\.0 \s*\K\S+(?=\s*0\.0\.0\.0)"
Saya sering menggunakan ini:
route -n | awk '{ print $2 }' | grep -Eo '[1-9]{0,3}\.[1-9]{0,3}\.[0-9]{0,3}\.[1-9]{0,3}'
192.168.0.1
?
Jika Anda memiliki akses ke peramban web pada sistem, Anda dapat mengunjungi http://whatsmyrouterip.com/ dan itu seharusnya dapat menemukan ip Anda tanpa perintah apa pun.
Kalau tidak, cukup membuka terminal dan melakukan ip route | grep default
harus cukup. Mungkin memberi lebih dari satu tergantung pada antarmuka jaringan Anda tho.
hostname -I
190.200.200.107 172.21.0.1 172.17.0.1 172.19.0.1 172.18.0.1
jadi untuk mendapatkan hanya masalah IP
hostname -I | cut -d' ' -f1
190.200.200.107
nm-tool | grep -oP '(?i)gateway:\s*\K\S+'