Comment afficher (uniquement) l'adresse IP de mon routeur?

22

Quelle commande puis-je exécuter pour obtenir uniquement l'adresse IP de mon routeur?

Avec cette commande, je ne devrais avoir que l'IP de mon routeur et non, par exemple, toute la table de routage (comme lorsque je cours route -n).

kaio
la source

Réponses:

22

One-liners:

  • nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2
  • nm-tool | grep -i gateway | awk '{print $2}
  • netstat -nr | awk '$1 == "0.0.0.0"{print$2}'
  • arp -n | awk '{print $1}' Remarque: ne fonctionne que si votre machine est la seule sur le réseau
  • ip route show | grep -i 'default via'| awk '{print $3 }'

sortie: 192.168.0.1pour moi

REMARQUE :

Pour la version 15.04 et ultérieure, il n'y en a pas nm-tool, alors utilisez nmcli dev show <IFACE>. Par exemple,

$ nmcli dev show wlan7 | grep GATEWAY                                                                                    
IP4.GATEWAY:                            192.168.0.1
IP6.GATEWAY:                            

Modifications et informations supplémentaires

Comme vous pouvez le voir en examinant la commande, nous prenons la sortie de nm-tool(qui, notez-le, prend les informations de NetworkManager), trouvons la ligne contenant le mot gateway, imprimons les informations avec écho (séparées par des espaces), puis coupons uniquement le deuxième élément de cet ensemble sortie. Notez que si vous avez deux connexions ou plus, vous devrez peut-être retirer la xargs echo | cut -d' ' -f2partie supérieure et la remplacer par awk '{print $2}'; en d'autres termes, la ligne entière ressemblerait à ceci nm-tool | grep -i gateway | awk '{print $2}'. Alternativement, vous auriez pu utiliser nm-tool | grep -oP '(?i)gateway:\s*\K\S+'comme proposé par Avinash Raj dans les commentaires. Comme vous pouvez le voir, rien de spécial n'est fait ici, et l'ensemble de l'épreuve ici n'est qu'un exercice d'utilisation des outils d'édition de sortie tels que cut, awk et grep.

Une autre méthode pour obtenir les informations sur la passerelle consiste à nmcli dev listutiliser la commande (oui, en s'appuyant toujours sur le gestionnaire de réseau). nmcliest la version en ligne de commande du gestionnaire de réseau. Vous pourriez courir nmcli dev list | grep -i routersou vous pourriez courir nmcli dev list | grep -i 'gw ='. Encore une fois, vous pouvez vous exercer à couper toutes les autres informations, sauf l'adresse IP souhaitée, si vous le souhaitez.

Étant donné que dans la question d'origine, la seule spécification était d'imprimer uniquement la passerelle par défaut, je me fie ici à la sortie de nm-tool. NetworkManager est fourni avec Ubuntu par défaut, c'est la manière standard de gérer les connexions réseau d'Ubuntu. Si vous utilisez quelque chose d'autre, comme wicd ou vous connectez via wpa_cli, nm-tool ne vous fournira pas de réponse. Dans ce cas, vous trouverez peut-être les réponses des autres plus utiles.

Une option plus distro-neutre et config-neutre serait d'utiliser netstat -n, qui utilise une table de routage du noyau, similaire à route -n. Sa sortie est en dessous, rien de surprenant.

  Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 wlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     9      0        0 wlan0

Et voici la façon de découper vos informations souhaitées: netstat -nr | awk '$1 == "0.0.0.0"{print$2}'

Un autre, neutre aussi: arp -n | awk '{print $1}'

Sergiy Kolodyazhnyy
la source
simplenm-tool | grep -oP '(?i)gateway:\s*\K\S+'
Avinash Raj
@AvinashRaj Merci! Je n'ai pas beaucoup étudié le grep et le awk, donc je travaille sur les connaissances que j'avais déjà. Ce sera bon à savoir
Sergiy Kolodyazhnyy
Cela est peut-être dû à une particularité (supplémentaire) de ma configuration, mais sur une machine avec des adaptateurs eth0et wlan0, tous deux activement connectés mais avec une passerelle configurée uniquement sur wlan0, des nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2sorties simplement 0.0.0.0. nm-tool | grep -oP '(?i)gateway:\s*\K\S+'produit deux lignes: 0.0.0.0suivi de 192.168.1.1. (Les ip route ...et les route -n ...moyens produisent juste 192.168.1.1, ce que je considérerais comme le résultat le plus souhaitable.)
Eliah Kagan
Cela ne fonctionnera pas si le réseau n'est pas géré par network-managerex. Par ifupdownou ifconfig.. dans ces cas nm-toolne générera pas la sortie souhaitée .. en résumé cette réponse repose uniquement sur le réseau géré par network-manager..
heemayl
@EliahKagan Ah, je vois. Dans le cas de ma commande, il trouve des lignes avec «passerelle», puis l'écho comme une ligne séparée par des espaces, et coupe le deuxième élément. Étant donné que vous disposez de deux lignes de ce type, ma commande n'en imprime qu'une. La commande d'Avinash est meilleure dans ce cas. Quant à 0.0.0.0, voici quelque chose de connexe . Quant au commentaire de heemayl, oui, c'est vrai, et il n'y avait aucune spécification dans la question du PO autre que juste pour montrer la sortie
Sergiy Kolodyazhnyy
7

Vous pouvez le trouver de nombreuses façons

ip route show default

Une meilleure question, quoi ou comment voulez-vous façonner la sortie?

ip route show | awk '/default/ {print $3}'

tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2}' | uniq

D'après les commentaires - (merci Avinash Raj 0

tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
Panthère
la source
vous n'avez pas besoin de o pour uniqjuste tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'serait de 5 pouces.
Avinash Raj
tant de choix. Sur mon système, il imprime deux fois sans uniq. Votre solution fonctionne également.
Panther
Remarque tracepathprend -men charge sur certaines versions d'Ubuntu mais pas sur d'autres .
Eliah Kagan
Soit dit en passant, @ bodhi.zazen, votre réponse varie, utilisez traceroute. Même idée de commande différente, non?
Sergiy Kolodyazhnyy
@serg bien sûr, il y a probablement une longue liste de commandes et d'options de filtrage, sed, awk, perl, grep ...
Panther
6

Comme vous l'utilisez habituellement route -n, vous pouvez essayer cette sedsolution associée à route -n:

route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p' 

Voici un test:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
192.168.0.0     0.0.0.0         255.255.240.0   U     0      0        0 eth0

$ route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p' 
192.168.1.1

Une autre façon serait d'utiliser grep:

$ route -n | tr -s ' ' | grep -Po "(?<=0\.0\.0\.0 )[^ ]+(?= 0\.0\.0\.0)"
192.168.1.1

Comme l'a souligné @AvinashRaj, cela peut être fait en utilisant uniquement grep(pas besoin de compresser les espaces en utilisant tr):

route -n | grep -Po "0\.0\.0\.0\s*\K\S+(?=\s*0\.0\.0\.0)"
192.168.1.1
heemayl
la source
vous n'avez pas besoin d'utiliser tr, grep seul fera le travailroute -n | grep -Po "0\.0\.0\.0 \s*\K\S+(?=\s*0\.0\.0\.0)"
Avinash Raj
1

J'utilise celui-ci assez souvent:

route -n | awk '{ print $2 }' | grep -Eo '[1-9]{0,3}\.[1-9]{0,3}\.[0-9]{0,3}\.[1-9]{0,3}'
krt
la source
Et si l'adresse est 192.168.0.1?
Avinash Raj
1

Si vous avez accès à un navigateur Web sur le système, vous pouvez aller sur http://whatsmyrouterip.com/ et il devrait pouvoir trouver votre ip sans aucune commande.

Sinon, il suffit d’ouvrir le terminal et de faire un ip route | grep default. Il peut en donner plusieurs en fonction de vos interfaces réseau.

MaZZly
la source
0

J'utilise cela assez souvent et facile à retenir:

route | grep default | awk '{print $2}'
sys0dm1n
la source
0
hostname  -I

190.200.200.107 172.21.0.1 172.17.0.1 172.19.0.1 172.18.0.1

donc pour obtenir uniquement le problème IP

hostname -I | cut -d' ' -f1 

190.200.200.107

Scott Stensland
la source