Ich versuche, das Standard-Gateway mit dem Ziel 0.0.0.0 abzurufen
Ich habe diesen Befehl verwendet: netstat -rn | grep 0.0.0.0
und es gibt diese Liste zurück:
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
Mein Ziel hier ist es, das Standard-Gateway mit dem Ziel 0.0.0.0 zu pingen. das ist also "133.88.31.70"; aber dieser gibt eine Liste zurück, weil 'grep' verwendet wird.
Die Frage ist: Wie bekomme ich nur das Standard-Gateway? Ich benötige es für mein Bash-Skript, um festzustellen, ob eine Netzverbindung besteht oder nicht.
ip
da draußen. In der Tatip route show
ist ein Alias fürip route list
und Sie können überprüfenman ip
, ob dieser Unterbefehl die Syntax hatip route { list | flush } SELECTOR
... Und kein einziger dieser gültigen Selektoren ist aufgeführtdefault
. Ich habe das Gefühl, wirip route show table default
sollten tun, was wir wollen, aber leider nicht.ip route show | awk '/^default/{print $3}'
Dieser Befehl ist viel schneller als der
ip route | grep
Standard auf einem System mit vielen (10000+) RoutenSuchen Sie zum Beispiel von meinem Router mit vollständigem BGP und manueller Standardroute als Backup
ip route show default show
alle Routen für mich nicht nur Standardrouteip route get
nicht Standard oder 0.0.0.0/0 als Parameter akzeptierenquelle
ip route show default
sollte den Trick für das Standard-Gateway tun, oder Sie können verwenden, umip route get <someip>
zu sehen, wie die Route für eine bestimmte IP-Adresse ist.quelle
Wenn Sie dies mit verwenden möchten
netstat
(damit es auf etwas funktioniert, das NICHT Linux ist ), lautet die allgemeine Lösung:netstat -rn | grep '^\(default\|0\.0\.0\.0\)' | awk '{print $2}'
Dies zeigt, dass die Routing-Tabellen IPs verwenden, anstatt Hostnamen (
netstat -rn
)aufzulösen, nach dem Standard-Gateway suchen (Zeilen, die mit
0.0.0.0
oder beginnendefault
),und den Gateway-Host drucken (zweites Feld der Ergebnisse).
Die Verbreitung von
\
Zeichen im regulären Ausdruck ist signifikant:\(
und\)
geben Sie eine Gruppe an\|
ist das Wechselzeichen (das Ding links oder das Ding rechts stimmt überein)\.
- das Literalzeichen.
im Gegensatz zu einem regulären Ausdruck.
(der mit einem einzelnen Zeichen übereinstimmt).quelle
grep -e
oderegrep
würde auch den Trick machen, ohne dass die Klammern und das Rohr entkommen müssenegrep '^(default|0\.0\.0\.0)'
So mache ich es:
quelle
Tut es hier
quelle
grep default
wenn Sie diedefault
Route bereits in Ihremip
Befehl angegeben haben?Der SEHR einfache Weg ... fragen Sie die Routing-Tabelle, wie sie zu einer IP außerhalb ihres Netzwerks gelangt
Google DNS == 8.8.8.8
IP-Route erhalten 8.8.8.8
quelle
oder
oder
oder
oder
Wenn ich es richtig verstehe, ist die Standard-Gateway-Suche für genau diese Route - die Route mit allen Nullen - entweder 0.0.0.0/0.0.0.0 (oder 0/0) für IPv4 oder 0000: 0000: 0000: 0000: 0000: 0000 : 0000: 0000 (oder: :) für IPv6.
Jedoch (!), Ohne entweder den AF anzugeben, den Sie verwenden möchten (-4 oder -6 oder -f inet oder -f inet6) oder die Route mit allen Nullen als IPv4- oder IPv6-Präfix anzugeben (0/0 impliziert IPv4) kann es nicht herausfinden, was "Standard" ist ...
Persönlich glaube ich nicht, dass die Manpage diesbezüglich sehr klar ist, aber das sind nur meine zwei Cent.
quelle