Cara menemukan alamat IP gateway di Linux

9

Perintah apa yang dapat Anda gunakan untuk menemukan Gateway IP Address (mis. Alamat router rumah) untuk eth0 di Linux?

Saya perlu mendapatkan alamat IP dari aplikasi baris perintah untuk digunakan dalam skrip shell.

J. Polfer
sumber
Apakah Anda mencari alamat IP eksternal router? Di masa lalu saya telah menggunakan skrip goresan layar untuk mendapatkan hal semacam itu dari halaman pengaturan router. Sebagian besar router rumah memiliki pengaturan berbasis browser yang mudah diakses dari dalam. Sulit untuk memberikan solusi umum tetapi Anda dapat menggunakan curl atau wget untuk mengambil halaman dan kemudian menggunakan grep & awk untuk mendapatkan alamat IP.
Tom Bascom
Seharusnya saya lebih jelas dalam pertanyaan saya. Pada dasarnya, saya ingin mencari alamat IP gateway yang diatur ke eth0 pada kotak yang memiliki antarmuka ethernet tunggal. Secara kebetulan, ini harus alamat IP dari rumah, dasar, tipe Linksys atau lebih, router NAT. Saya membutuhkannya sehingga saya bisa ping ke skrip shell.
J. Polfer
Tampak lebih kompleks dari yang saya butuhkan, tetapi ide yang keren dan dijamin untuk bekerja.
J. Polfer

Jawaban:

18

Untuk mencetak hanya IP gw default:

route -n | grep 'UG[ \t]' | awk '{print $2}'

Untuk mencetak informasi rute pada semua antarmuka:

route -n

atau

netstat -rn
l0c0b0x
sumber
Tidakkah UG membutuhkan antarmuka untuk aktif? Saya pikir hanya G akan lebih baik.
J. Polfer
Either way, ini tepat. Banyak Thanx.
J. Polfer
Ingin memberi tahu Anda - Saya sebenarnya menggunakan jawaban ini, tetapi hanya dengan G dalam pola grep; tidak memiliki iptool pada mesin yang saya butuhkan untuk menjalankan ini.
J. Polfer
2
Anda dapat menyelamatkan diri dari grep, awk juga dapat memfilter:route -n | awk '{if($4=="UG")print $2}'
Kenny Rasschaert
Saya akan menyarankan sesuatu seperti route -n|awk '$4~/G/{print $2; exit(0)}'untuk gateway pertama, tetapi ip route get IPlebih baik, karena mencantumkan rute yang akan benar-benar dibawa ke IP yang diberikan, yang sulit ditemukan dengan routesendirian
Tino
9
ip route show 0.0.0.0/0 dev eth0 | cut -d\  -f3

adalah entri saya :)

MikeyB
sumber
Saya akan memperbaiki yang ini: ip route show 0.0.0.0/0 | awk '{print $ 3}'
Dominic Eidson
Entahlah ... saya masih sedikit penekanan tombol :)
MikeyB
Dan cut~ 20 kali lebih ringan dari biner awk.
K3 --- rnc
Jika saya tinggalkan "dev eth0" apakah itu berfungsi untuk eth0 atau wlan0? (Saya akan mencoba ini jika saya memiliki kabel lan yang cukup panjang)
Eric Nelson
Ini bekerja untuk saya untuk openwrt os :)
Joy Acharya
5

Anda bisa mendapatkan gateway default sistem dari output netstat -ratauroute

Kamil Kisiel
sumber
3
$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.199.0   0.0.0.0         255.255.255.240 U         0 0          0 virbr1
192.168.200.0   0.0.0.0         255.255.255.240 U         0 0          0 virbr2
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 wlan0
192.168.122.0   0.0.0.0         255.255.255.0   U         0 0          0 virbr0
0.0.0.0         192.168.1.254   0.0.0.0         UG        0 0          0 wlan0

0.0.0.0 adalah gateway default Anda, menunjuk ke 192.168.1.254 di tempat saya.

wzzrd
sumber
2

Output dari rute -n atau netstat -rn, dan mencari tujuan 0.0.0.0.

TCampbell
sumber
2

Saya lebih suka paket iproute :

# get the default route
ip route list | awk ' /^default/ {print $3}'
# get the default route but limit on eth0 (output may be empty)
ip route list dev eth0 | awk ' /^default/ {print $3}'
Martin M.
sumber
@sheepsimulator: Sayangnya, ini asumsi yang buruk. Saran Supermathie lebih baik.
Dominic Eidson
@Dominic Eidson - Kenapa? Hanya ada satu antarmuka ethernet fisik pada mesin.
J. Polfer
1
persis apa yang merupakan asumsi buruk?
Martin M.
2

Adakah yang lebih pendek dari ini? =)

ip r | awk '/^def/{print $3}'
ThorstenS
sumber
1
Tantangan diterima: ip r | awk 'END{print $3}'tiga karakter lebih pendek.
Kenny Rasschaert
bagus, tetapi pada kotak debian / squeeze lokal saya dengan jembatan KVM default gw saya ada di baris satu. aneh tapi Nyata. Jadi solusi keren Anda tidak bekerja di mana-mana: - / (bagaimanapun +1)
ThorstenS
ip bukan perintah UNIX generik - jadi sekali lagi itu tidak akan berfungsi di mana-mana.
Mei
Anda benar, tetapi di $ Subject berdiri Linux dan bukan UNIX;) @ David: wow, Anda punya blog yang sangat bagus!
ThorstenS
1
read x x i x< <(ip r g 1), hasilnya dalam variabel $ i untuk penggunaan lebih lanjut
Tino
1

netstat -rn |awk '{if($1=="0.0.0.0") print $2}'

ini akan mencetak IP gateway dengan bersih. (Apa yang akan menjadi scripting linux tanpa awk ?)


sumber
Maka Anda harus menggunakan sed gantinya ...netstat -rn|sed -n '/^0.0.0.0/{ s/^[0. ]*//; s/ .*$//; p; }
Mei
0

Jika Anda ingin mendapatkan gateway dari file antarmuka:

#!/bin/bash
gateway=$(grep -P '^\tgateway' /etc/network/interfaces)
gateway=$(echo ${gateway:9})    # Remove "  gateway "   
echo "gateway = $gateway"
if [ $gateway == "" ]; then
    echo "gateway is blank"
    exit -1
fi
xinthose
sumber
0

Perintah one liner saya untuk mendapatkan alamat IP gateway default:

route | grep default | awk '{print $2}'
sys0dm1n
sumber
-2

Buka Terminal di OS Linux Anda Biasanya terletak di bar bagian atas atau bawah, tergantung pada distribusi Linux yang Anda gunakan Setelah Anda membuka jendela Terminal, masukkan perintah berikut “ip route | grep default ”Sekarang tunggu sebentar untuk output dan catat alamat gateway default Anda di layar. Alamat gateway Anda akan terlihat seperti 192.168.1.1. Setelah Anda mengetahuinya, Anda dapat mulai mengkonfigurasi router Anda melalui panel admin webnya.

Jika ini tidak memperbaiki jaringan Anda, Anda mungkin perlu router baru.

Asif Mumtaz
sumber