Hedef verilen LINUX'ta varsayılan ağ geçidini nasıl alabilirim?


11

Hedef 0.0.0.0 kullanarak varsayılan ağ geçidi almaya çalışıyorum

Bu komutu kullandım: netstat -rn | grep 0.0.0.0

ve bu listeyi döndürür:

Destination - Gateway      - Genmask         - Flags - MSS - Window - irtt - Iface
10.9.9.17   - 0.0.0.0      - 255.255.255.255 - UH    - 0     0        0    - tun0
133.88.0.0  - 0.0.0.0      - 255.255.0.0     - U     - 0     0        0    - eth0
0.0.0.0     - 133.88.31.70 - 0.0.0.0         - UG    - 0     0        0    - eth0

Buradaki hedefim 0.0.0.0 hedefini kullanarak varsayılan ağ geçidine ping atmak; dolayısıyla, bu "133.88.31.70" dir; ancak bu liste 'grep' kullandığından bir liste döndürür.

Soru: Yalnızca varsayılan ağ geçidini nasıl alabilirim? Net bağlantımın yapılıp yapılmadığını belirlemek için bash betiğime ihtiyacım olacak.

Yanıtlar:


21
DEFAULT_ROUTE=$(ip route show default | awk '/default/ {print $3}')
ping -c 1 $DEFAULT_ROUTE

Bu probleminizi çözmeli.


@Suezy Ha! Görmek? awk!
Jeremy Powell

yakın tek alıntı / yakın köşeli ayraç uyumsuz bence - aksi halde harika çalışıyor!
Mark K Cowan

3
Bu komutla çevrimiçi olarak birkaç cevap gördüm, ancak hiçbiri "varsayılanı göster" in neden kullanıldığını açıklamıyor. Aslında "ip route show" herhangi bir parametre olmadan benim için aynı şeyi yapar. Yani sorum şu neden komutta "varsayılan"? Bu ne demek?
user658991

@ user658991 Bu tavşan deliğinden aşağı intim ve haklısın. Orada en yaygın sürümlerinde hiçbir şey yapmaz ip. Aslında ip route showbir takma addır ve bu alt komutun sözdizimine sahip ip route listolup olmadığını kontrol edebilirsiniz ... Ve listelenen geçerli seçicilerin tek biri değil . İstediğimizi yapmalıyız gibi hissediyorum ama maalesef değil. Başka birine de hattın başlangıcını eşleştirin (uyarıldınız):man ipip route { list | flush } SELECTORdefaultip route show table default ip route show | awk '/^default/{print $3}'
L0j1k

5
 ip route show default 0.0.0.0/0

Bu komut ip route | grepbirçok (10000+) yol bulunan sistemde varsayılandan çok daha hızlıdır

Örneğin tam BGP ve yedek olarak manuel varsayılan rotaya sahip yönlendiricim

router:~# time ip route show default 0.0.0.0/0
default via XXX.XXX.192.254 dev eth0.123 

real    0m0.707s
router:~# time ip route | grep default
default via XXX.XXX.192.254 dev eth0.123 

real    0m8.596s
  • çünkü ip route show default showbenim için tüm rotalar sadece varsayılan rota değil
  • çünkü varsayılanip route get kabul veya 0.0.0.0/0 parametre olarak

İproute2 üzerinden doğrudan yerel filtrelemeyi göstermek için +1 ! Bu muhteşem yardımcı program paketinin (kuşkusuz yaratıcı) eski Linux textfu'dan daha doğru, güvenilir ve performanslı olduğu birçok durum var
RubyTuesdayDONO

1
Bu harika bir cevap! ama hala iproute2 belgeleri tarafından biraz karışık. Komuttaki "varsayılan" ne anlama geliyor? Eğer dokümanı doğru okuyorsam, bu komut "ip rota gösterisi varsayılan 0/0" ile aynı olmalıdır, değil mi? "0/0" biçimi nedir?
user658991

3

ip route show defaultvarsayılan ağ geçidi için hile yapmalı veya ip route get <someip>belirli bir IP adresi için rotanın ne olduğunu görmek için kullanabilirsiniz .


i ip yolu denedim ve tüm ağ geçitleri için listesini görüntüler .. ve evet, varsayılan bir de altta görüntülenir. bunun için teşekkürler. =) Ama benim amacım bu varsayılan ağ geçidi için kullanılan IP adresini almak. Bash betiği kullanarak, yukarı olup olmadığını kontrol etmek için bir ping yapacağım.
Suezy

"Varsayılanı göster" için dört giriş alıyorum. "ip yolu varsayılanı göster | awk '/ default / {print $ 3}'" yalnızca IP adresini almalıdır.
David Pashley

2

Bunu kullanarak yapmak istiyorsanız netstat(bu yüzden Linux olmayan bir şey üzerinde çalışacaktır ) genel çözüm:

netstat -rn | grep '^\(default\|0\.0\.0\.0\)' | awk '{print $2}'

Bu, yönlendirme tablolarını, ana bilgisayar adlarını ( netstat -rn) çözümlemek yerine IP'leri kullanarak gösterir,
varsayılan ağ geçidini ( 0.0.0.0veya ile başlayan satırlar ) arar ve ağ geçidi ana bilgisayarını (sonuçların ikinci alanı default)
yazdırır.

\Normal ifadedeki karakterlerin çoğalması önemlidir:

  • \(ve \)bir grup belirtin
  • \| alternatif karakterdir (soldaki veya sağdaki şey)
  • IP adresindeki noktalar şu şekilde temsil edilir \.- .Normal İfadeye karşılık gelen gerçek karakter .(herhangi bir tek karakterle eşleşir)

1
grep -eya egrepda köşeli parantez ve boru kaçmak gerek kalmadan yapmakegrep '^(default|0\.0\.0\.0)'
Mark K Cowan

1

Bunu nasıl yaparım:

#!/bin/sh
GATEWAY_DEFAULT=$(ip route list | sed -n -e "s/^default.*[[:space:]]\([[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\).*/\1/p")
echo ${GATEWAY_DEFAULT}

1
 ip route show default | grep default | awk {'print $3'}

Burada mı


Komutunuzda rotayı grep defaultzaten belirttiğinizde neden ? defaultip
lindhe

0

ÇOK kolay yol ... yönlendirme tablosuna ağ dışında bir IP'ye nasıl ulaştığını sorun

Google DNS == 8.8.8.8

ip güzergahı 8.8.8.8 olsun


0
ip route show 0/0

veya

ip route show 0.0.0.0/0

veya

ip route show 0.0.0.0/0.0.0.0

veya

ip -f inet route show default

veya

ip -4 route show default

Doğru anlarsam, tam yol için varsayılan ağ geçidi araması - all-sıfır yolu - IPv4 veya 0.0: 1.0/0.0.0.0 (veya 0/0) veya IPv4 veya 0000: 0000: 0000: 0000: 0000: 0000: 0000'dır. : 0000: 0000 (veya: IPv6 için :).

Ancak (!), Kullanmak istediğiniz AF'yi belirtmeden (-4 veya -6 veya -f inet veya -f inet6) veya all-sıfır yolunu IPv4 veya IPv6 öneki olarak belirtmeden (0/0 IPv4'ü belirtir) 'varsayılan'ın ne olduğunu anlayamaz ...

Şahsen, man sayfasının bu konuda çok net olduğunu düşünmüyorum, ama bu sadece iki sentim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.