Come trovare l'indirizzo IP del gateway in Linux


9

Quale comando puoi usare per trovare l'indirizzo IP del gateway (es. L'indirizzo del router di casa) per eth0 in Linux?

Devo ottenere l'indirizzo IP da un'app della riga di comando da utilizzare in uno script di shell.


Stai cercando l'indirizzo IP esterno del router? In passato ho usato uno script di scraping dello schermo per ottenere quel genere di cose dalle pagine di configurazione del router. La maggior parte dei router domestici ha una configurazione basata su browser di facile accesso dall'interno. È difficile fornire una soluzione generale ma puoi usare curl o wget per recuperare la pagina e quindi usare grep & awk per ottenere l'indirizzo IP.
Tom Bascom,

Avrei dovuto essere più chiaro nella mia domanda. Fondamentalmente, voglio trovare l'indirizzo IP del gateway impostato su eth0 su una scatola che ha una singola interfaccia Ethernet. Per coincidenza, questo dovrebbe essere l'indirizzo IP di un router NAT domestico, di base, di tipo Linksys o giù di lì. Ne ho bisogno per poterlo eseguire il ping in uno script di shell.
J. Polfer,

Sembra più complesso di quello di cui ho bisogno, ma un'idea interessante e garantita al lavoro.
J. Polfer,

Risposte:


18

Per stampare solo l'IP gw predefinito:

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

Per stampare le informazioni sul percorso su tutte le interfacce:

route -n

o

netstat -rn

UG non richiederebbe che l'interfaccia fosse attiva? Penso che solo G sarebbe meglio.
J. Polfer,

Ad ogni modo, questo è perfetto. Molte grazie.
J. Polfer,

Volevo farti sapere - In realtà sto usando questa risposta, ma con solo una G nel modello grep; non avevo iptools sulla macchina su cui ho bisogno di eseguirlo.
J. Polfer,

2
Puoi salvare te stesso il grep, awk può anche filtrare:route -n | awk '{if($4=="UG")print $2}'
Kenny Rasschaert il

Suggerirei qualcosa di simile route -n|awk '$4~/G/{print $2; exit(0)}'al primo gateway, ma ip route get IPè meglio, perché elenca il percorso che verrebbe davvero portato al dato IP, che è difficile da trovare da routesolo
Tino

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

è la mia voce :)


Vorrei migliorare questo: ip route show 0.0.0.0/0 | awk '{print $ 3}'
Dominic Eidson,

Non so ... il mio è ancora meno tasti premuti :)
MikeyB,

Ed cutè ~ 20 volte più leggero del binario di awk.
K3 --- rnc,

Se lascio il "dev eth0" funziona per eth0 o wlan0? (Proverei questo se avessi un cavo lan abbastanza lungo)
Eric Nelson,

Ha funzionato per me per openwrt os :)
Joy Acharya,

5

È possibile ottenere il gateway predefinito del sistema dall'output di netstat -roroute


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 è il gateway predefinito, che punta a 192.168.1.254 al posto mio.


2

L'output da route -n o netstat -rn e cerca la destinazione 0.0.0.0.


2

Preferisco il pacchetto 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: Sfortunatamente, questa è una cattiva ipotesi da fare. Il suggerimento di Supermathie è migliore.
Dominic Eidson,

@Dominic Eidson - Perché? C'è solo un'interfaccia Ethernet fisica sulla macchina.
J. Polfer,

1
che cos'è esattamente una cattiva supposizione?
Martin M.,

2

qualcuno più basso di questo? =)

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

1
Sfida accettata: ip r | awk 'END{print $3}'tre caratteri in meno.
Kenny Rasschaert,

bello, ma sulla mia debian / squeeze box locale con i ponti KVM il mio gw predefinito è in prima linea. strano ma vero. Quindi la tua soluzione interessante non funziona ovunque: - / (comunque +1)
ThorstenS

ip non è un comando UNIX generico, quindi di nuovo non funzionerà ovunque.
Mei,

hai ragione, ma in $ Subject c'è Linux e non UNIX;) @David: wow, hai davvero un bel blog!
ThorstenS,

1
read x x i x< <(ip r g 1), il risultato è nella variabile $ i per un ulteriore utilizzo
Tino

1

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

questo stamperà in modo pulito l'IP del gateway. (cosa sarebbe lo scripting Linux senza awk ?)


Quindi dovresti usare sed invece ...netstat -rn|sed -n '/^0.0.0.0/{ s/^[0. ]*//; s/ .*$//; p; }
Mei

0

Se desideri ottenere il gateway dal file interfacce:

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

Il mio comando one liner per ottenere l'indirizzo IP del gateway predefinito:

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

-2

Apri Terminale sul tuo sistema operativo Linux Di solito si trova nella barra superiore o inferiore, a seconda della distribuzione Linux che usi Una volta aperta la finestra Terminale, inserisci i seguenti comandi “ip route | grep default ”Ora attendi un secondo per l'output e nota il tuo indirizzo gateway predefinito sullo schermo Il tuo indirizzo gateway dovrebbe assomigliare a 192.168.1.1. Una volta che lo conosci, puoi iniziare a configurare il tuo router tramite il suo pannello di amministrazione web.

Se ciò non risolve la tua rete, potresti aver bisogno di un nuovo router.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.