Yanıtlar:
Tek gömlekleri:
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}'
Not: Yalnızca makineniz ağdaki tek makinedeyse çalışır.ip route show | grep -i 'default via'| awk '{print $3 }'
çıktı: 192.168.0.1
benim için
NOT :
15.04 ve sonrası için, hayır nm-tool
, bu yüzden kullanın nmcli dev show <IFACE>
. Örneğin,
$ nmcli dev show wlan7 | grep GATEWAY
IP4.GATEWAY: 192.168.0.1
IP6.GATEWAY:
Düzenlemeler ve ek bilgiler
Komutun incelenmesinden görebileceğiniz gibi, nm-tool
(not, NetworkManager'dan bilgi alan) çıktısını alırız , sözcük içeren satır bulur gateway
, eko içeren bilgiden yazdırır (boşluklarla ayrılır) ve sonra tümünün sadece ikinci öğesini keseriz çıktı. Orada iki veya daha fazla bağlantınız varsa, üst xargs echo | cut -d' ' -f2
kısmı çıkarmanız ve onunla değiştirmeniz gerekebileceğini unutmayın awk '{print $2}'
; Diğer bir deyişle, tüm çizgi böyle görünecek nm-tool | grep -i gateway | awk '{print $2}'
. Alternatif nm-tool | grep -oP '(?i)gateway:\s*\K\S+'
olarak, yorumlarda Avinash Raj tarafından önerilen şekilde kullanılmış olabilir . Gördüğünüz gibi burada özel bir şey yapılmadı ve buradaki sıkıntı sadece kesme, awk ve grep gibi çıktı düzenleme araçlarını kullanmada bir alıştırma.
Ağ geçidi bilgisini almanın başka bir yöntemi de nmcli dev list
(evet, hala ağ yöneticisine dayanarak) komutudur. nmcli
Şebeke yöneticisinin komut satırı sürümüdür. Kaçabilirsin nmcli dev list | grep -i routers
ya da kaçabilirsin nmcli dev list | grep -i 'gw ='
. Yine, isterseniz, istediğiniz ip adresi hariç, diğer tüm bilgileri kesme alıştırması yapabilirsiniz.
Orijinal sorudaki tek özellik yalnızca varsayılan ağ geçidini yazdırmak olduğundan, burada nm-araç çıktısına güveniyorum. NetworkManager varsayılan olarak Ubuntu ile birlikte gelir, bu Ubuntu'nun ağ bağlantılarını yönetmek için standart yoldur. Wicd gibi başka bir şey kullanırsanız veya wpa_cli aracılığıyla bağlanın, nm-aracı size bir cevap vermez. Bu durumda, diğer kişilerin cevaplarını aşağıda daha yararlı bulabilirsiniz.
netstat -n
Çekirdek yönlendirme tablosu kullanan, benzer şekilde, daha bağımsız olan ve config-nötr bir seçenek kullanılacaktır route -n
. Çıkışı körüklü, şaşırtıcı bir şey değil.
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
Ve işte istediğiniz bilgiyi kesmenin yolu: netstat -nr | awk '$1 == "0.0.0.0"{print$2}'
Bir tane daha nötr: arp -n | awk '{print $1}'
eth0
ve wlan0
hem aktif olarak bağlanmış hem de sadece üzerinde konfigüre edilmiş bir ağ geçidi olan wlan0
, nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2
yalnızca çıktıları olan bir makinede olabilir 0.0.0.0
. nm-tool | grep -oP '(?i)gateway:\s*\K\S+'
İki satır çıktı verir: 0.0.0.0
bunu takip eder 192.168.1.1
. (En çok istenen sonucu dikkate alacağım yollar ip route ...
ve route -n ...
yollar tam 192.168.1.1
ortaya çıkar.)
network-manager
örneğin ifupdown
veya tarafından yönetilmiyorsa bu işe yaramazsa, ifconfig
bu durumlarda nm-tool
istenen çıktıyı üretmez ... Özet olarak, bu cevap yalnızca yönetilen ağa dayanır network-manager
..
Bunu birçok yolla bulabilirsiniz.
ip route show default
Daha iyi bir soru, çıktıyı nasıl şekillendirmek istersiniz?
ip route show | awk '/default/ {print $3}'
tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2}' | uniq
Yorumlardan - (teşekkür ederim Avinash Raj 0
tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
uniq
Sadece 5 in tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
olacağı için o gerek yok .
Genelde kullandığınız gibi route -n
, bu sed
çözümü birleştiğinde deneyebilirsiniz route -n
:
route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p'
İşte bir test:
$ 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
Başka bir yol kullanmak olacaktır grep
:
$ route -n | tr -s ' ' | grep -Po "(?<=0\.0\.0\.0 )[^ ]+(?= 0\.0\.0\.0)"
192.168.1.1
@AvinashRaj'ın belirttiği gibi, bu yalnızca kullanılarak yapılabilir grep
(kullanarak boşlukları sıkıştırmaya gerek yoktur tr
):
route -n | grep -Po "0\.0\.0\.0\s*\K\S+(?=\s*0\.0\.0\.0)"
192.168.1.1
tr
yok, tek başına grep işi yapacakroute -n | grep -Po "0\.0\.0\.0 \s*\K\S+(?=\s*0\.0\.0\.0)"
Bunu oldukça sık kullanıyorum:
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
?
Sistemdeki bir web tarayıcısına erişiminiz varsa http://whatsmyrouterip.com/ adresine gidebilirsiniz ve ip'inizi herhangi bir komut kullanmadan bulabilmesi gerekir.
Aksi taktirde terminalin açılması ve ip route | grep default
yapılması yeterli olacaktır. Ağ arayüzlerinize bağlı olarak birden fazla verebilir tho.
hostname -I
190.200.200.107 172.21.0.1 172.17.0.1 172.19.0.1 172.18.0.1
Sadece IP sorunu almak için
hostname -I | cut -d' ' -f1
190.200.200.107
nm-tool | grep -oP '(?i)gateway:\s*\K\S+'