Cómo encontrar la dirección IP de la puerta de enlace en Linux

9

¿Qué comando puede usar para encontrar la dirección IP de la puerta de enlace (es decir, la dirección del enrutador doméstico) para eth0 en Linux?

Necesito obtener la dirección IP de una aplicación de línea de comandos para usar en un script de shell.

J. Polfer
fuente
¿Está buscando la dirección IP externa del enrutador? En el pasado, he usado un script de raspado de pantalla para obtener ese tipo de cosas de las páginas de configuración del enrutador. La mayoría de los enrutadores domésticos tienen una configuración basada en navegador que es fácil de acceder desde el interior. Es difícil dar una solución general, pero puede usar curl o wget para recuperar la página y luego usar grep & awk para obtener la dirección IP.
Tom Bascom
Debería haber sido más claro en mi pregunta. Básicamente, quiero encontrar la dirección IP de la puerta de enlace que está configurada en eth0 en un cuadro que tiene una única interfaz de ethernet. Casualmente, esta debería ser la dirección IP de un enrutador NAT, básico, de tipo Linksys, más o menos. Lo necesito para poder hacer ping en un script de shell.
J. Polfer
Parece más complejo de lo que necesito, pero una idea genial y garantizada para trabajar.
J. Polfer

Respuestas:

18

Para imprimir solo la IP predeterminada de gw:

route -n | grep 'UG[ \t]' | awk '{print $2}'

Para imprimir información de ruta en todas las interfaces:

route -n

o

netstat -rn
l0c0b0x
fuente
¿No requeriría UG que la interfaz esté activa? Creo que solo G sería mejor.
J. Polfer
De cualquier manera, esto es perfecto. Muchas gracias.
J. Polfer
Quería hacerle saber: en realidad estoy usando esta respuesta, pero con solo una G en el patrón grep; no tenía iptools en la máquina, necesito ejecutar esto.
J. Polfer
2
Puede ahorrarse el grep, awk también puede filtrar:route -n | awk '{if($4=="UG")print $2}'
Kenny Rasschaert
Sugeriría algo así como route -n|awk '$4~/G/{print $2; exit(0)}'para la primera puerta de enlace, pero ip route get IPes mejor, porque enumera la ruta que realmente se tomaría para la IP dada, que es difícil de encontrar routesolo
Tino
9
ip route show 0.0.0.0/0 dev eth0 | cut -d\  -f3

es mi entrada :)

MikeyB
fuente
Mejoraría este: ip route show 0.0.0.0/0 | awk '{print $ 3}'
Dominic Eidson
No lo sé ... el mío es aún menos pulsaciones :)
MikeyB
Y cutes ~ 20 veces más binario que binario awk.
K3 --- rnc
Si dejo el "dev eth0", ¿funciona para eth0 o wlan0? (Me gustaría probar este si tuviera un cable LAN tiempo suficiente)
Eric Nelson
Me funcionó para openwrt os :)
Joy Acharya
5

Puede obtener la puerta de enlace predeterminada del sistema a partir de la salida de netstat -roroute

Kamil Kisiel
fuente
3
$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.199.0   0.0.0.0         255.255.255.240 U         0 0          0 virbr1
192.168.200.0   0.0.0.0         255.255.255.240 U         0 0          0 virbr2
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 wlan0
192.168.122.0   0.0.0.0         255.255.255.0   U         0 0          0 virbr0
0.0.0.0         192.168.1.254   0.0.0.0         UG        0 0          0 wlan0

El 0.0.0.0 es su puerta de enlace predeterminada, apuntando a 192.168.1.254 en mi lugar.

wzzrd
fuente
2

La salida de la ruta -n o netstat -rn, y busca el destino 0.0.0.0.

TCampbell
fuente
2

Prefiero el paquete iproute :

# get the default route
ip route list | awk ' /^default/ {print $3}'
# get the default route but limit on eth0 (output may be empty)
ip route list dev eth0 | awk ' /^default/ {print $3}'
Martin M.
fuente
@sheepsimulator: Desafortunadamente, esta es una mala suposición. La sugerencia de Supermathie es mejor.
Dominic Eidson
@Dominic Eidson - ¿Por qué? Solo hay una interfaz física de Ethernet en la máquina.
J. Polfer
1
¿Qué es exactamente una mala suposición?
Martin M.
2

Alguien más bajo que esto? =)

ip r | awk '/^def/{print $3}'
ThorstenS
fuente
1
Desafío aceptado: ip r | awk 'END{print $3}'es tres caracteres más corto.
Kenny Rasschaert
agradable, pero en mi caja de debian / squeeze local con puentes KVM mi gw predeterminado está en la línea uno. extraño pero cierto. Entonces su solución genial no funciona en todas partes: - / (de todos modos +1)
ThorstenS
ip no es un comando genérico de UNIX, por lo que nuevamente no funcionará en todas partes.
Mei
tienes razón, pero en $ Subject se encuentra Linux y no UNIX;) @David: wow, ¡tienes un blog realmente bueno!
ThorstenS
1
read x x i x< <(ip r g 1), el resultado está en la variable $ i para su uso posterior
Tino
1

netstat -rn |awk '{if($1=="0.0.0.0") print $2}'

esto imprimirá limpiamente la puerta de enlace IP. (¿Qué sería de las secuencias de comandos de Linux sin awk ?)


fuente
Entonces tendrías que usar sed en su lugar ...netstat -rn|sed -n '/^0.0.0.0/{ s/^[0. ]*//; s/ .*$//; p; }
Mei
0

Si desea obtener la puerta de enlace desde el archivo de interfaces:

#!/bin/bash
gateway=$(grep -P '^\tgateway' /etc/network/interfaces)
gateway=$(echo ${gateway:9})    # Remove "  gateway "   
echo "gateway = $gateway"
if [ $gateway == "" ]; then
    echo "gateway is blank"
    exit -1
fi
xinthose
fuente
0

Mi comando one liner para obtener la dirección IP de la puerta de enlace predeterminada:

route | grep default | awk '{print $2}'
sys0dm1n
fuente
-2

Abra la Terminal en su sistema operativo Linux Por lo general, se encuentra en la barra superior o en la barra inferior, dependiendo de la distribución de Linux que use Una vez que haya abierto la ventana Terminal, ingrese los siguientes comandos “ruta IP | grep default ”Ahora espere un segundo para la salida y anote la dirección de su puerta de enlace predeterminada en la pantalla La dirección de su puerta de enlace debería ser similar a 192.168.1.1. Una vez que lo sepa, puede comenzar a configurar su enrutador a través de su panel de administración web.

Si esto no solucionó su red, es posible que necesite un nuevo enrutador.

Asif Mumtaz
fuente