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.


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

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 :)


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


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.


2

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


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}'

@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}'

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 ?)


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

0

Perintah one liner saya untuk mendapatkan alamat IP gateway default:

route | grep default | awk '{print $2}'

-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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.