web-dev-qa-db-fra.com

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

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

Avec cette commande, je ne devrais avoir que l'adresse IP de mon routeur et non, par exemple, la totalité de la table de routage (comme lorsque j'exécute route -n).

20
kaio

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: fonctionne uniquement si votre ordinateur est le seul sur le réseau.
  • ip route show | grep -i 'default via'| awk '{print $3 }'

sortie: 192.168.0.1 pour moi

NOTE:

Pour 15.04 et les versions ultérieures, il n'y a pas nm-tool, utilisez donc nmcli dev show <IFACE>. Par exemple,

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

Éditions et informations supplémentaires

Comme vous pouvez le constater en examinant la commande, nous prenons la sortie de nm-tool (qui prend note des informations de NetworkManager), une ligne contenant Word gateway, une impression contenant des informations avec echo (séparés par des espaces), puis coupons uniquement le second élément de cette sortie entière. Notez que si vous avez deux connexions ou plus, vous aurez peut-être besoin de la partie top remove xargs echo | cut -d' ' -f2 et de la remplacer par awk '{print $2}'; autrement dit, toute la ligne ressemblerait à ceci nm-tool | grep -i gateway | awk '{print $2}'. Sinon, vous auriez pu utiliser nm-tool | grep -oP '(?i)gateway:\s*\K\S+' tel que proposé par Avinash Raj dans les commentaires. Comme vous pouvez le constater, rien d’exceptionnel n’est fait ici, et toute cette épreuve consiste simplement à utiliser des outils d’édition tels que cut, awk et grep.

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

Étant donné que dans la question initiale, la seule spécification consistait à n'imprimer que la passerelle par défaut, je m'appuie sur la sortie de nm-tool ici. NetworkManager est livré avec Ubuntu par défaut, il s’agit du moyen standard de gérer les connexions réseau d’Ubuntu. Si vous utilisez quelque chose d'autre, comme wicd ou que vous vous connectez via wpa_cli, nm-tool ne vous fournira pas de réponse. Dans ce cas, les réponses des autres personnes ci-dessous peuvent être plus utiles.

Une option plus neutre du point de vue de la distribution et neutre de la configuration serait d'utiliser netstat -n, qui utilise la table de routage du noyau, semblable à route -n. Sa sortie est en bas, rien d'étonnant.

  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 le moyen de supprimer les informations souhaitées: netstat -nr | awk '$1 == "0.0.0.0"{print$2}'

Un autre point également neutre: arp -n | awk '{print $1}'

21

Vous pouvez le trouver de plusieurs 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}'
7
Panther

Comme vous utilisez habituellement route -n, vous pouvez essayer cette solution sed 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 solution consisterait à utiliser grep:

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

Comme @AvinashRaj l'a fait remarquer, ceci peut être fait en n'utilisant que grep (inutile de serrer 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
5
heemayl

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

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

1
MaZZly

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

Je l'utilise assez souvent et facile à retenir:

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

190.200.200.107 172.21.0.1 172.17.0.1 172.19.0.1 172.18.0.1

afin d'obtenir que la question de la propriété intellectuelle

hostname -I | cut -d' ' -f1 

190.200.200.107

0
Scott Stensland