Respuestas:
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}'
Nota: funciona solo si su máquina es la única en la redip route show | grep -i 'default via'| awk '{print $3 }'
salida: 192.168.0.1
para mi
NOTA :
Para 15.04 y posterior, no hay nm-tool
, así que úselo nmcli dev show <IFACE>
. Por ejemplo,
$ nmcli dev show wlan7 | grep GATEWAY
IP4.GATEWAY: 192.168.0.1
IP6.GATEWAY:
Ediciones e información adicional
Como puede ver al examinar el comando, tomamos la salida de nm-tool
(que, nota, toma información del NetworkManager) , buscamos la línea que contiene la palabra gateway
, imprimimos que la información con eco (separados por espacios), y luego cortamos solo el segundo elemento de ese conjunto salida. Tenga en cuenta que si tiene dos o más conexiones allí, es posible que necesite quitar la xargs echo | cut -d' ' -f2
parte superior y reemplazarla con awk '{print $2}'
; en otras palabras, toda la línea se vería así nm-tool | grep -i gateway | awk '{print $2}'
. Alternativamente, podría haber utilizado nm-tool | grep -oP '(?i)gateway:\s*\K\S+'
según lo propuesto por Avinash Raj en los comentarios. Como puede ver, no se hace nada especial aquí, y toda la prueba aquí es simplemente un ejercicio para usar herramientas de edición de salida como cut, awk y grep.
Otro método para obtener la información de la puerta de enlace es a través del nmcli dev list
comando (sí, aún confiando en el administrador de red). nmcli
es la versión de línea de comandos del administrador de red. Podrías correr nmcli dev list | grep -i routers
o podrías correr nmcli dev list | grep -i 'gw ='
. Una vez más, puede hacer ejercicio para cortar toda la otra información, excepto la dirección IP deseada, si así lo desea.
Dado que en la pregunta original, la única especificación era imprimir solo la puerta de enlace predeterminada, confío en la salida de nm-tool aquí. NetworkManager viene con Ubuntu por defecto, esta es la forma estándar de administrar las conexiones de red de Ubuntu. Si usa algo diferente, como wicd o se conecta a través de wpa_cli, nm-tool no le dará una respuesta. En tal caso, puede encontrar las respuestas de otras personas más útiles a continuación.
Sería usar una opción más neutral en cuanto a distribución y configuración neutral netstat -n
, que utiliza la tabla de enrutamiento del núcleo, similar a route -n
. Su salida es inferior, nada sorprendente.
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
Y esta es la forma de recortar la información deseada: netstat -nr | awk '$1 == "0.0.0.0"{print$2}'
Otro, neutral también: arp -n | awk '{print $1}'
eth0
y wlan0
, ambos conectados de forma activa pero con una puerta de enlace configurada solo en wlan0
, las nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2
salidas simplemente 0.0.0.0
. nm-tool | grep -oP '(?i)gateway:\s*\K\S+'
salidas de dos líneas: 0.0.0.0
seguido por 192.168.1.1
. (Las formas ip route ...
y route -n ...
producen justo 192.168.1.1
, lo que yo consideraría el resultado más deseable.)
network-manager
ejemplo, por ifupdown
o ... en ifconfig
esos casos nm-tool
no generará la salida deseada ... en pocas palabras, esta respuesta se basa únicamente en la red gestionada por network-manager
...
Puedes encontrarlo de muchas maneras
ip route show default
Una mejor pregunta, ¿qué o cómo quieres dar forma a la salida?
ip route show | awk '/default/ {print $3}'
tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2}' | uniq
De los comentarios - (gracias Avinash Raj 0
tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
uniq
solo tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
sería 5in.
Como suele utilizar route -n
, puede probar esta sed
solución junto con route -n
:
route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p'
Aquí hay una prueba:
$ 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
Otra forma sería usar grep
:
$ route -n | tr -s ' ' | grep -Po "(?<=0\.0\.0\.0 )[^ ]+(?= 0\.0\.0\.0)"
192.168.1.1
Como @AvinashRaj ha señalado, esto se puede hacer solo usando grep
(no es necesario apretar los espacios usando tr
):
route -n | grep -Po "0\.0\.0\.0\s*\K\S+(?=\s*0\.0\.0\.0)"
192.168.1.1
tr
, grep solo hará el trabajoroute -n | grep -Po "0\.0\.0\.0 \s*\K\S+(?=\s*0\.0\.0\.0)"
Yo uso este bastante a menudo:
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 tiene acceso a un navegador web en el sistema, puede ir a http://whatsmyrouterip.com/ y debería poder encontrar su ip sin ningún comando.
De lo contrario, simplemente abrir la terminal y hacer una ip route | grep default
debería ser suficiente. Puede dar más de uno dependiendo de sus interfaces de red.
hostname -I
190.200.200.107 172.21.0.1 172.17.0.1 172.19.0.1 172.18.0.1
para obtener solo el problema de IP
hostname -I | cut -d' ' -f1
190.200.200.107
nm-tool | grep -oP '(?i)gateway:\s*\K\S+'