Comment trouver l'adresse IP de la passerelle sous Linux


9

Quelle commande pouvez-vous utiliser pour trouver l'adresse IP de la passerelle (c'est-à-dire l'adresse du routeur domestique) pour eth0 sous Linux?

J'ai besoin d'obtenir l'adresse IP d'une application en ligne de commande pour l'utiliser dans un script shell.


Recherchez-vous l'adresse IP externe du routeur? Dans le passé, j'ai utilisé un script de grattage d'écran pour obtenir ce genre de chose à partir des pages de configuration du routeur. La plupart des routeurs domestiques ont une configuration basée sur un navigateur qui est facile d'accès depuis l'intérieur. Il est difficile de donner une solution générale, mais vous pouvez utiliser curl ou wget pour récupérer la page, puis utiliser grep & awk pour obtenir l'adresse IP.
Tom Bascom

J'aurais dû être plus clair dans ma question. Fondamentalement, je veux trouver l'adresse IP de la passerelle définie sur eth0 sur un boîtier doté d'une seule interface Ethernet. Par coïncidence, cela devrait être l'adresse IP d'un routeur NAT domestique, de base, de type Linksys ou plus. J'en ai besoin pour pouvoir le cingler dans un script shell.
J.Polfer

Cela semble plus complexe que ce dont j'ai besoin, mais c'est une idée sympa et garantie de travailler.
J.Polfer

Réponses:


18

Pour imprimer uniquement l'IP gw par défaut:

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

Pour imprimer les informations d'itinéraire sur toutes les interfaces:

route -n

ou

netstat -rn

UG ne demanderait-il pas que l'interface soit active? Je pense que juste G serait mieux.
J.Polfer

Quoi qu'il en soit, c'est parfait. Merci beaucoup.
J.Polfer

Je voulais vous faire savoir - j'utilise en fait cette réponse, mais avec juste un G dans le motif grep; n'a pas eu iptools sur la machine sur laquelle je dois exécuter cela.
J. Polfer

2
Vous pouvez vous épargner le grep, awk peut également filtrer:route -n | awk '{if($4=="UG")print $2}'
Kenny Rasschaert

Je suggérerais quelque chose comme route -n|awk '$4~/G/{print $2; exit(0)}'pour la première passerelle, mais ip route get IPc'est mieux, car il répertorie la route qui serait vraiment prise vers l'IP donnée, ce qui est difficile à trouver avec routeseul
Tino

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

est mon entrée :)


Je voudrais améliorer celui-ci: ip route show 0.0.0.0/0 | awk '{print $ 3}'
Dominic Eidson

Je ne sais pas ... le mien a encore moins de frappes :)
MikeyB

Et cutest binaire environ 20 fois plus léger que awk.
K3 --- rnc

Si je laisse le "dev eth0" cela fonctionne-t-il pour eth0 ou wlan0? (J'essaierais ceci si j'avais un câble LAN suffisamment long)
Eric Nelson

Cela a fonctionné pour moi pour openwrt os :)
Joy Acharya

5

Vous pouvez obtenir la passerelle par défaut du système à partir de la sortie de netstat -rouroute


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

Le 0.0.0.0 est votre passerelle par défaut, pointant vers 192.168.1.254 chez moi.


2

La sortie de route -n ou netstat -rn, et recherchez la destination 0.0.0.0.


2

Je préfère le package 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: Malheureusement, c'est une mauvaise hypothèse à faire. La suggestion de Supermathie est meilleure.
Dominic Eidson

@Dominic Eidson - Pourquoi? Il n'y a qu'une seule interface Ethernet physique sur la machine.
J.Polfer

1
quelle est exactement une mauvaise hypothèse?
Martin M.

2

quelqu'un de plus petit que ça? =)

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

1
Défi accepté: ip r | awk 'END{print $3}'trois caractères plus courts.
Kenny Rasschaert

bien, mais sur ma boîte debian / squeeze locale avec des ponts KVM, mon gw par défaut est en ligne un. Etrange mais vrai. Donc, votre solution cool ne fonctionne pas partout: - / (de toute façon +1)
ThorstenS

ip n'est pas une commande UNIX générique - là encore, elle ne fonctionnera pas partout.
Mei

vous avez raison, mais dans $ Subject, Linux et non UNIX;) @David: wow, vous avez vraiment un blog sympa!
ThorstenS

1
read x x i x< <(ip r g 1), le résultat est dans la variable $ i pour une utilisation ultérieure
Tino

1

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

cela imprimera proprement l'IP de la passerelle. (Que seraient les scripts Linux sans awk ?)


Ensuite, vous devez utiliser sed à la place ...netstat -rn|sed -n '/^0.0.0.0/{ s/^[0. ]*//; s/ .*$//; p; }
Mei

0

Si vous souhaitez obtenir la passerelle à partir du fichier d'interface:

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

Ma commande one liner pour obtenir l'adresse IP de la passerelle par défaut:

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

-2

Ouvrir le terminal sur votre système d'exploitation Linux Il est généralement situé dans la barre supérieure ou inférieure, selon la distribution Linux que vous utilisez Une fois que vous avez ouvert la fenêtre Terminal, entrez les commandes suivantes «ip route | grep default ”Attendez maintenant une seconde pour la sortie et notez votre adresse de passerelle par défaut à l'écran. Votre adresse de passerelle devrait ressembler à 192.168.1.1. Une fois que vous le connaissez, vous pouvez commencer à configurer votre routeur via son panneau d'administration Web.

Si cela ne résout pas votre réseau, vous aurez peut-être besoin d'un nouveau routeur.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.