J'essaye d'obtenir la passerelle par défaut, en utilisant la destination 0.0.0.0
j'ai utilisé cette commande: netstat -rn | grep 0.0.0.0
et il retourne cette liste:
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
Mon objectif ici est d'envoyer une requête ping à la passerelle par défaut en utilisant la destination 0.0.0.0; c'est-à-dire "133.88.31.70"; mais celui-ci renvoie une liste en raison de l'utilisation de 'grep'.
La question est: comment obtenir la passerelle par défaut uniquement? J'en aurai besoin pour que mon script bash identifie si la connexion Internet est active ou non.
ip
. En fait,ip route show
c'est un alias pourip route list
et vous pouvez vérifierman ip
que cette sous-commande a la syntaxeip route { list | flush } SELECTOR
... Et pas un seul de ces sélecteurs valides répertoriés ne l'estdefault
. Je pense que nousip route show table default
devrions faire ce que nous voulons, mais malheureusement, ce n'est pas le cas. Pour tout le monde, faites correspondre le début de la ligne aussi (vous avez été averti):ip route show | awk '/^default/{print $3}'
Cette commande est beaucoup plus rapide que celle
ip route | grep
par défaut sur le système avec de nombreux (10000+) itinérairesRecherchez par exemple à partir de mon routeur avec BGP complet et route par défaut manuelle comme sauvegarde
ip route show default show
tous les itinéraires pour moi, non seulement l'itinéraire par défautip route get
n'accepte pas la valeur par défaut ou 0.0.0.0/0 comme paramètrela source
ip route show default
devrait faire l'affaire pour la passerelle par défaut, ou vous pouvez utiliserip route get <someip>
pour voir quel est l'itinéraire pour une adresse IP particulière.la source
Si vous voulez faire cela en utilisant
netstat
(donc ça marchera sur quelque chose qui n'est PAS Linux ) la solution générale est:netstat -rn | grep '^\(default\|0\.0\.0\.0\)' | awk '{print $2}'
Cela montre les tables de routage, en utilisant des adresses IP plutôt que de résoudre les noms d'hôte (
netstat -rn
),recherche la passerelle par défaut (lignes commençant par
0.0.0.0
oudefault
)et imprime l'hôte de la passerelle (deuxième champ des résultats).
La prolifération des
\
caractères dans l'expression régulière est significative:\(
et\)
spécifiez un groupe\|
est le caractère d'alternance (la chose à gauche ou la chose à droite correspond)\.
- signifiant le caractère littéral.
par opposition à une expression régulière.
(correspondant à n'importe quel caractère)la source
grep -e
ouegrep
ferait aussi l'affaire sans que les supports et le tuyau ne s'échappentegrep '^(default|0\.0\.0\.0)'
Voici comment je le fais:
la source
Est-ce ici
la source
grep default
alors que vous spécifiez déjà l'default
itinéraire dans votreip
commande?La manière TRÈS simple ... demandez à la table de routage comment elle parvient à une adresse IP en dehors de son réseau
DNS DNS == 8.8.8.8
ip route get 8.8.8.8
la source
ou
ou
ou
ou
Si je comprends bien, la recherche de passerelle par défaut pour cette route exacte - la route tous zéros - est soit 0.0.0.0/0.0.0.0 (ou 0/0) pour IPv4 ou 0000: 0000: 0000: 0000: 0000: 0000 : 0000: 0000 (ou: :) pour IPv6.
Cependant (!), Sans spécifier l'AF que vous souhaitez utiliser (-4 ou -6 ou -f inet ou -f inet6), ni spécifier la route des zéros en tant que préfixe IPv4 ou IPv6 (0/0 implique IPv4) , il ne peut pas comprendre ce qu'est le "défaut" ...
Personnellement, je ne pense pas que la page de manuel soit très claire à ce sujet, mais c'est juste mes deux cents.
la source