Réponses:
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éseauip route show | grep -i 'default via'| awk '{print $3 }'
sortie: 192.168.0.1
pour 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' ' -f2
partie 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 list
utiliser la commande (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 pourriez courir nmcli dev list | grep -i routers
ou 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}'
eth0
et 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' ' -f2
sorties simplement 0.0.0.0
. nm-tool | grep -oP '(?i)gateway:\s*\K\S+'
produit deux lignes: 0.0.0.0
suivi 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.)
network-manager
ex. Par ifupdown
ou ifconfig
.. dans ces cas nm-tool
ne 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
..
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}'
uniq
juste tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
serait de 5 pouces.
Comme vous l'utilisez habituellement route -n
, vous pouvez essayer cette sed
solution 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
tr
, grep seul fera le travailroute -n | grep -Po "0\.0\.0\.0 \s*\K\S+(?=\s*0\.0\.0\.0)"
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}'
192.168.0.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.
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
nm-tool | grep -oP '(?i)gateway:\s*\K\S+'