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).

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}'


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}'

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

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}'

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.


0

J'utilise cela assez souvent et facile à retenir:

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

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

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.