¿Cómo mostrar (solo) la dirección IP de mi enrutador?

22

¿Qué comando puedo ejecutar para obtener solo la dirección IP de mi enrutador?

Con este comando, debería tener solo la dirección IP de mi enrutador y no, por ejemplo, toda la tabla de enrutamiento (como cuando ejecuto route -n).

kaio
fuente

Respuestas:

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}' Nota: funciona solo si su máquina es la única en la red
  • ip route show | grep -i 'default via'| awk '{print $3 }'

salida: 192.168.0.1para 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' ' -f2parte 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 listcomando (sí, aún confiando en el administrador de red). nmclies la versión de línea de comandos del administrador de red. Podrías correr nmcli dev list | grep -i routerso 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}'

Sergiy Kolodyazhnyy
fuente
simplenm-tool | grep -oP '(?i)gateway:\s*\K\S+'
Avinash Raj
@AvinashRaj ¡Gracias! No he estudiado grep y awk mucho en profundidad, así que opero con el conocimiento que ya tenía. Será bueno saberlo
Sergiy Kolodyazhnyy
Tal vez esto se deba a alguna peculiaridad (adicional) de mi configuración, pero en una máquina con adaptadores eth0y 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' ' -f2salidas simplemente 0.0.0.0. nm-tool | grep -oP '(?i)gateway:\s*\K\S+'salidas de dos líneas: 0.0.0.0seguido 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.)
Eliah Kagan
Esto no funcionará si la red no está siendo administrada, por network-managerejemplo, por ifupdowno ... en ifconfigesos casos nm-toolno generará la salida deseada ... en pocas palabras, esta respuesta se basa únicamente en la red gestionada por network-manager...
heemayl
@EliahKagan Ah, ya veo. En el caso de mi comando, encuentra líneas con 'puerta de enlace', luego lo repite como una línea separada por espacios y corta el segundo elemento. Debido a que tiene dos de esas líneas allí, mi comando solo imprime una de ellas. El comando de Avinash es mejor en este caso. En cuanto a 0.0.0.0, aquí hay algo relacionado . En cuanto al comentario de heemayl, sí, eso es cierto, y no había especificaciones en la pregunta del OP aparte de solo mostrar el resultado
Sergiy Kolodyazhnyy
7

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}'
Pantera
fuente
no necesitas o uniqsolo tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'sería 5in.
Avinash Raj
tantas opciones. En mi sistema se imprime dos veces sin uniq. SU solución también funciona.
Panther
Note tracepathadmite -men algunas versiones de Ubuntu pero no en otras .
Eliah Kagan
Por cierto, @ bodhi.zazen, hay una variación en tu respuesta, usa traceroute. La misma idea comando diferente, ¿verdad?
Sergiy Kolodyazhnyy
@serg seguro, probablemente hay una larga lista de comandos y opciones de filtrado, sed, awk, perl, grep ...
Panther
6

Como suele utilizar route -n, puede probar esta sedsolució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
heemayl
fuente
no necesita usar tr, grep solo hará el trabajoroute -n | grep -Po "0\.0\.0\.0 \s*\K\S+(?=\s*0\.0\.0\.0)"
Avinash Raj
1

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}'
krt
fuente
¿Qué pasa si la dirección es 192.168.0.1?
Avinash Raj
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 defaultdebería ser suficiente. Puede dar más de uno dependiendo de sus interfaces de red.

MaZZly
fuente
0

Lo uso con bastante frecuencia y es fácil de recordar:

route | grep default | awk '{print $2}'
sys0dm1n
fuente
0
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

Scott Stensland
fuente