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
).
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}'
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}'
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
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.
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}'
Je l'utilise assez souvent et facile à retenir:
route | grep default | awk '{print $2}'
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