ver tarjeta saber puerta mis enlace configurar configuracion como cambiar agregar adicionar activar shell gateway

shell - tarjeta - ¿Cómo obtengo la puerta de enlace predeterminada en LINUX dado el destino?



ver configuracion de red en linux (14)

Estoy tratando de obtener la puerta de enlace predeterminada, usando el destino 0.0.0.0

netstat -rn | grep 0.0.0.0 este comando: netstat -rn | grep 0.0.0.0 netstat -rn | grep 0.0.0.0

Y devolvió esta lista:

**Destination Gateway Genmask Flags MSS Window irtt Iface<br> 10.9.9.17 0.0.0.0 255.255.255.255 UH 0 0 0 tun0<br> 133.88.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0<br> 0.0.0.0 133.88.31.70 0.0.0.0 UG 0 0 0 eth0**<br>

Mi objetivo aquí es hacer ping a la puerta de enlace predeterminada utilizando el destino 0.0.0.0 ; por lo tanto, eso es 133.88.31.70 ; pero esta devuelve una lista debido al uso de grep .

¿Cómo obtengo la puerta de enlace predeterminada solamente? Lo necesitaré para mi script bash para identificar si la conexión de red está activa o no.


/ sbin / route | egrep "^ default" | cut -d '''' -f2-12 #and ''cut'' al gusto ...


Aquí hay muchas respuestas. Algunos de estos son bastante específicos de la distribución. Para aquellos que encontraron esta publicación buscando una forma de encontrar la puerta de enlace, pero no necesitando usarla en el código / utilización por lotes (como lo hice yo) ... intente:

traceroute www.google.com

el primer salto es su puerta de enlace predeterminada.


Así es como lo hago:

#!/bin/sh GATEWAY_DEFAULT=$(ip route list | sed -n -e "s/^default.*[[:space:]]/([[:digit:]]/+/.[[:digit:]]/+/.[[:digit:]]/+/.[[:digit:]]/+/).*//1/p") echo ${GATEWAY_DEFAULT}


El comando ip route del paquete iproute2 puede seleccionar rutas sin necesidad de usar awk / grep , etc. para hacer la selección.

Para seleccionar la ruta predeterminada (de posiblemente muchos)

$ ip -4 route list 0/0 # use -6 instead of -4 for ipv6 selection. default via 172.28.206.254 dev wlan0 proto static

Para seleccionar el siguiente salto para una interfaz en particular

$ ip -4 route list type unicast dev eth0 exact 0/0 # Exact specificity default via 172.29.19.1 dev eth0

En el caso de múltiples puertas de enlace predeterminadas, puede seleccionar cuál se elige como el próximo salto a una dirección de destino particular.

$ ip route get $(dig +short google.com | tail -1) 173.194.34.134 via 172.28.206.254 dev wlan0 src 172.28.206.66 cache

A continuación, puede extraer el valor usando sed / awk / grep , etc. Aquí hay un ejemplo usando bash ''s read builtin.

$ read _ _ gateway _ < <(ip route list match 0/0); echo "$gateway" 172.28.206.254


El siguiente comando devuelve la dirección IP de la puerta de enlace predeterminada en un host Linux utilizando solo bash y awk:

printf "%d.%d.%d.%d" $(awk ''$2 == 00000000 && $7 == 00000000 { for (i = 8; i >= 2; i=i-2) { print "0x" substr($3, i-1, 2) } }'' /proc/net/route)

Esto incluso debería funcionar si tiene más de una puerta de enlace predeterminada siempre que sus métricas sean diferentes (y deberían ser ...).


Este sencillo script de Perl lo hará por ti.

#!/usr/bin/perl $ns = `netstat -nr`; $ns =~ m/0.0.0.0/s+([0-9]+.[0-9]+.[0-9]+.[0-9]+)/g; print $1

Básicamente, ejecutamos netstat, lo guardamos en $ ns. Luego encuentra la línea que comienza con 0.0.0.0. Luego, el paréntesis en la expresión regular guarda todo dentro de $ 1. Después de eso, simplemente imprímalo.

Si se llamaba null-gw.pl, simplemente ejecútelo en el comando como:

perl null-gw.pl

o si lo necesitas dentro de una expresión bash:

echo $(perl null-gw.pl)

Buena suerte.


Otra cosa perl:

$return = (split(" ", `ip route | grep default`))[2];<br>

Nota: use estos backticks antes de ip y luego de default


Para obtener una lista de todos los gateways predeterminados, use la respuesta de mezgani , duplicada (y ligeramente simplificada) aquí:

/sbin/ip route | awk ''/^default/ { print $3 }''

Si tiene múltiples interfaces de red configuradas simultáneamente, esto imprimirá múltiples puertas de enlace. Si desea seleccionar una única interfaz de red conocida por su nombre (por ejemplo, eth1 ), simplemente busque eso además de filtrar las ^default líneas ^default :

/sbin/ip route |grep ''^default'' | awk ''/eth1/ {print $3}''

Puede crear una secuencia de comandos que tome un único nombre de interfaz de red como argumento e imprima la puerta de enlace asociada:

#!/bin/bash if [[ $# -ne 1 ]]; then echo "ERROR: must specify network interface name!" >&2 exit 1 fi # The third argument of the ''default'' line associated with the specified # network interface is the Gateway. # By default, awk does not set the exit-code to a nonzero status if a # specified search string is not found, so we must do so manually. /sbin/ip route | grep ''^default'' | awk "/$1/ {print /$3; found=1} END{exit !found}"

Como se señaló en los comentarios, esto tiene la ventaja de establecer un código de salida razonable, que puede ser útil en un contexto programático más amplio.


Puede obtener la puerta de enlace predeterminada usando el comando ip esta manera:

IP=$(/sbin/ip route | awk ''/default/ { print $3 }'') echo $IP


Si sabe que 0.0.0.0 es su salida esperada, y estará al principio de la línea, podría usar lo siguiente en su secuencia de comandos:

IP=`netstat -rn | grep -e ''^0/.0/.0/.0'' | cut -d'' '' -f2`

luego haz referencia a la variable ${IP} .

Sería mejor usar awk en lugar de cortar aquí ... es decir:

IP=`netstat -rn | grep -e ''^0/.0/.0/.0'' | awk ''{print $2}''`


funciona en cualquier linux:

route -n|grep "UG"|grep -v "UGH"|cut -f 10 -d " "


netstat -rn | grep 0.0.0.0 | awk ''{print $ 2}'' | grep -v "0.0.0.0"


use el comando a continuación:

route -n | grep ''^0/.0/./0/.0[ /t]/+[1-9][0-9]*/.[1-9][0-9]*/.[1-9][0-9]*/.[1-9][0-9]*[ /t]/+0/.0/.0/.0[ /t]/+[^ /t]*G[^ /t]*[ /t]'' | awk ''{print $2}''


#!/bin/bash ##################################################################3 # Alex Lucard # June 13 2013 # # Get the gateway IP address from the router and store it in the variable $gatewayIP # Get the Router mac address and store it in the variable gatewayRouter # Store your routers mac address in the variable homeRouterMacAddress # # If you need the gateway IP uncomment the next line to get the gateway address and store it in the variable gateWayIP # gatewayIP=`sudo route -n | awk ''/^0.0.0.0/ {print $2}''` homeRouterMacAddress="20:aa:4b:8d:cb:7e" # Store my home routers mac address in homeRouterMac. gatewayRouter=`/usr/sbin/arp -a` # This if statement will search your gateway router for the mac address you have in the variable homeRouterMacAddress if `echo ${gatewayRouter} | grep "${homeRouterMacAddress}" 1>/dev/null 2>&1` then echo "You are home" else echo "You are away" fi