So finden Sie die Gateway-IP-Adresse unter Linux


9

Mit welchem ​​Befehl können Sie die Gateway-IP-Adresse (dh die Adresse des Heimrouters) für eth0 unter Linux ermitteln?

Ich muss die IP-Adresse von einer Befehlszeilen-App abrufen, um sie in einem Shell-Skript verwenden zu können.


Suchen Sie die externe IP-Adresse des Routers? In der Vergangenheit habe ich ein Screen-Scraping-Skript verwendet, um so etwas von den Router-Setup-Seiten zu erhalten. Die meisten Heimrouter verfügen über ein browserbasiertes Setup, auf das von innen leicht zugegriffen werden kann. Es ist schwierig, eine allgemeine Lösung zu finden, aber Sie können die Seite mit curl oder wget abrufen und dann mit grep & awk die IP-Adresse abrufen.
Tom Bascom

Ich hätte in meiner Frage klarer sein sollen. Grundsätzlich möchte ich die Gateway-IP-Adresse, die auf eth0 eingestellt ist, auf einer Box mit einer einzelnen Ethernet-Schnittstelle finden. Zufälligerweise sollte dies die IP-Adresse eines Home-Basis-NAT-Routers vom Typ Linksys oder so sein. Ich brauche es, damit ich es in einem Shell-Skript anpingen kann.
J. Polfer

Scheint komplexer als das, was ich brauche, aber eine coole Idee, die garantiert funktioniert.
J. Polfer

Antworten:


18

So drucken Sie nur die Standard-GW-IP aus:

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

So drucken Sie Routeninformationen auf allen Schnittstellen aus:

route -n

oder

netstat -rn

Würde UG nicht verlangen, dass die Schnittstelle aktiv ist? Ich denke nur G wäre besser.
J. Polfer

In jedem Fall ist dies genau richtig. Vielen Dank.
J. Polfer

Wollte Sie wissen lassen - ich verwende diese Antwort tatsächlich, aber mit nur einem G im Grep-Muster; Ich hatte keine Iptools auf dem Computer, auf dem ich dies ausführen muss.
J. Polfer

2
Sie können sich das grep sparen, awk kann auch filtern:route -n | awk '{if($4=="UG")print $2}'
Kenny Rasschaert

Ich würde so etwas wie route -n|awk '$4~/G/{print $2; exit(0)}'für das erste Gateway vorschlagen , ist aber ip route get IPbesser, weil es die Route auflistet, die wirklich zu der angegebenen IP geführt wird, die routeallein mit schwer zu finden ist
Tino

8
ip route show 0.0.0.0/0 dev eth0 | cut -d\  -f3

ist mein Eintrag :)


Ich würde dieses verbessern: ip route show 0.0.0.0/0 | awk '{print $ 3}'
Dominic Eidson

Ich weiß nicht ... meine sind noch weniger Tastenanschläge :)
MikeyB

Und cutist ~ 20 mal leichter binär als awk.
K3 --- rnc

Wenn ich das "dev eth0" weglasse, funktioniert es entweder für eth0 oder wlan0? (Ich würde es versuchen, wenn ich ein ausreichend langes LAN-Kabel hätte)
Eric Nelson

5

Sie können das Standard-Gateway des Systems über die Ausgabe von netstat -roder abrufenroute


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

Die 0.0.0.0 ist Ihr Standard-Gateway und zeigt an meiner Stelle auf 192.168.1.254.


2

Die Ausgabe von route -n oder netstat -rn und die Suche nach dem Ziel 0.0.0.0.


2

Ich bevorzuge das iproute- Paket:

# 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: Leider ist dies eine schlechte Annahme. Supermathies Vorschlag ist besser.
Dominic Eidson

@ Dominic Eidson - Warum? Es gibt nur eine physische Ethernet-Schnittstelle auf dem Computer.
J. Polfer

1
Was genau ist eine schlechte Annahme?
Martin M.

2

jemand kürzer als das? =)

ip r | awk '/^def/{print $3}'

1
Herausforderung angenommen: ip r | awk 'END{print $3}'ist drei Zeichen kürzer.
Kenny Rasschaert

schön, aber auf meiner lokalen Debian / Squeeze-Box mit KVM-Bridges ist mein Standard-GW in Zeile eins. komisch aber wahr. Ihre coole Lösung funktioniert also nicht überall: - / (jedenfalls +1)
ThorstenS

ip ist kein generischer UNIX-Befehl - daher funktioniert er auch hier nicht überall.
Mei

du hast recht, aber in $ Subject steht Linux und nicht UNIX;) @David: wow, du hast wirklich einen schönen Blog!
ThorstenS

1
read x x i x< <(ip r g 1), Ergebnis ist in Variable $ i für die weitere Verwendung
Tino

1

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

Dadurch wird die Gateway-IP sauber gedruckt. (Was wäre Linux Scripting ohne awk ?)


Dann müssten Sie stattdessen sed verwenden ...netstat -rn|sed -n '/^0.0.0.0/{ s/^[0. ]*//; s/ .*$//; p; }
Mei

0

Wenn Sie das Gateway aus der Schnittstellendatei abrufen möchten:

#!/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

Mein One-Liner-Befehl zum Abrufen der Standard-Gateway-IP-Adresse:

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

-2

Terminal unter Ihrem Linux-Betriebssystem öffnen Es befindet sich normalerweise in der oberen oder unteren Leiste, abhängig von der verwendeten Linux-Distribution. Geben Sie nach dem Öffnen des Terminal-Fensters die folgenden Befehle ein: „ip route | grep default ”Warten Sie nun eine Sekunde auf die Ausgabe und notieren Sie Ihre Standard-Gateway-Adresse auf dem Bildschirm. Ihre Gateway-Adresse sollte ungefähr wie 192.168.1.1 aussehen. Sobald Sie es wissen, können Sie mit der Konfiguration Ihres Routers über das Webadministrationsfenster beginnen.

Wenn dies Ihr Netzwerk nicht repariert hat, benötigen Sie möglicherweise einen neuen Router.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.