Bagaimana cara menunjukkan (hanya) alamat IP router saya?

22

Perintah apa yang bisa saya jalankan untuk mendapatkan alamat IP router saya saja?

Dengan perintah ini saya seharusnya hanya memiliki IP router saya dan tidak, misalnya, seluruh tabel routing (seperti ketika saya menjalankan route -n).

kaio
sumber

Jawaban:

22

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 jaringan
  • ip route show | grep -i 'default via'| awk '{print $3 }'

output: 192.168.0.1untuk 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' ' -f2bagian 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. nmcliadalah versi baris perintah dari manajer jaringan. Anda bisa berlari nmcli dev list | grep -i routersatau 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}'

Sergiy Kolodyazhnyy
sumber
sederhananm-tool | grep -oP '(?i)gateway:\s*\K\S+'
Avinash Raj
@AvinashRaj Terima kasih! Saya belum belajar grep dan awk secara mendalam sehingga mengoperasikan pengetahuan yang sudah saya miliki. Ini baik untuk diketahui
Sergiy Kolodyazhnyy
Mungkin ini karena beberapa (tambahan) keanehan konfigurasi saya, tetapi pada mesin dengan adaptor eth0dan wlan0, keduanya terhubung secara aktif tetapi dengan gateway yang hanya dikonfigurasikan wlan0, nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2output saja 0.0.0.0. nm-tool | grep -oP '(?i)gateway:\s*\K\S+'menghasilkan dua baris: 0.0.0.0diikuti oleh 192.168.1.1. (Cara ip route ...dan route -n ...menghasilkan adil 192.168.1.1, yang saya anggap hasil yang paling diinginkan.)
Eliah Kagan
Ini tidak akan berfungsi jika jaringan tidak dikelola oleh network-managermisalnya oleh ifupdownatau ifconfig..dalam kasus-kasus nm-tooltersebut tidak akan menghasilkan output yang diinginkan..singkatnya jawaban ini hanya bergantung pada jaringan yang dikelola oleh network-manager..
heemayl
@EliahKagan Ah, begitu. Dalam kasus perintah saya, ia menemukan baris dengan 'gateway' di dalamnya, lalu menggema sebagai satu baris yang dipisahkan oleh spasi, dan memotong item kedua di dalamnya. Karena Anda memiliki dua baris di sana, perintah saya hanya mencetak salah satunya. Perintah Avinash lebih baik dalam hal ini. Adapun 0.0.0.0, ada sesuatu yang terkait . Adapun komentar heemayl, ya, itu benar, dan tidak ada spesifikasi dalam pertanyaan OP selain hanya untuk menunjukkan output
Sergiy Kolodyazhnyy
7

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}'
Harimau kumbang
sumber
Anda tidak perlu untuk uniqhanya tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'akan menjadi 5in.
Avinash Raj
begitu banyak pilihan. Pada sistem saya ini mencetak dua kali tanpa / uniq. Solusi Anda juga berfungsi.
Panther
Catatan tracepathmendukung -mpada beberapa versi Ubuntu tetapi tidak pada yang lain .
Eliah Kagan
Ngomong-ngomong, @ bodhi.zazen, ada variasi pada jawaban Anda, gunakan traceroute. Ide yang sama, perintah yang berbeda, kan?
Sergiy Kolodyazhnyy
@erg yakin, mungkin ada daftar panjang perintah dan opsi pemfilteran, sed, awk, perl, grep ...
Panther
6

Seperti yang biasanya Anda gunakan route -n, Anda dapat mencoba sedsolusi 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
heemayl
sumber
Anda tidak perlu menggunakan tr, grep sendiri akan melakukan pekerjaanroute -n | grep -Po "0\.0\.0\.0 \s*\K\S+(?=\s*0\.0\.0\.0)"
Avinash Raj
1

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}'
krt
sumber
Bagaimana jika alamatnya 192.168.0.1?
Avinash Raj
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 defaultharus cukup. Mungkin memberi lebih dari satu tergantung pada antarmuka jaringan Anda tho.

MaZZly
sumber
0

Saya menggunakan ini cukup sering dan mudah diingat:

route | grep default | awk '{print $2}'
sys0dm1n
sumber
0
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

Scott Stensland
sumber