2011-07-21 14 views
101

Necesito recuperar la puerta de enlace predeterminada en una máquina Mac. Sé que en Linux route -n dará un resultado del cual puedo recuperar fácilmente esta información. Sin embargo, esto no funciona en Mac OSX (Snow Leopard).Cómo obtener la puerta de enlace predeterminada en Mac OSX

También probé netstat -nr | grep 'default', pero esperaba una salida más limpia como la producida por route -n en Linux/Unix. netstat -nr enumera todas las interfaces y la puerta de enlace predeterminada para ellas.

Cualquier tipo de sugerencia o sugerencia en la dirección correcta será apreciada.

+2

¿Migrar a SuperUser? – JMD

Respuesta

162

Usted puede tratar con:

route -n get default 

No es lo mismo que GNU/Linux de route -n (o incluso ip route show), pero es útil para comprobar la información de la ruta por defecto. Además, puede verificar la ruta que los paquetes llevarán a un host en particular. P.ej.

route -n get www.yahoo.com 

La salida sería similar a:

route to: 98.137.149.56 
destination: default 
     mask: 128.0.0.0 
    gateway: 5.5.0.1 
    interface: tun0 
     flags: <UP,GATEWAY,DONE,STATIC,PRCLONING> 
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount  mtu  expire 
     0   0   0   0   0   0  1500   0 

mi humilde opinión netstat -nr es lo que necesita. Incluso la aplicación de utilidad de red de MacOSX (*) usa la salida de netstat para mostrar la información de enrutamiento. Network utility screenshot displaying routing table information

espero que esto ayude :)

(*) Puede iniciar la utilidad de red con open /Applications/Utilities/Network\ Utility.app

+0

Gracias. Me acabas de ahorrar unas horas en la nueva casa cuando el módem de Time Warner decidió que quería la IP que mi enrutador solía tener, y si configuró la entrada. –

+0

De nada @ChrisDoggett – Humber

2

me gustaría utilizar algo en este sentido ...

netstat -rn | grep "default" | awk '{print $2}' 
+0

¿Cómo podemos lograr esto en la programación de objetivo c? ¿Hay algún marco para esto? –

29

Para la obtención de la lista de direcciones IP asociadas, puede usar netstat comando

netstat -rn 

Esto proporciona una larga lista de direcciones IP y no es fácil encontrar el campo requerido. El resultado de la muestra es el siguiente:

Routing tables 
Internet: 
Destination  Gateway   Flags  Refs  Use Netif Expire 
default   192.168.195.1  UGSc   17  0  en2 
127    127.0.0.1   UCS    0  0  lo0 
127.0.0.1   127.0.0.1   UH    1 254107  lo0 
169.254   link#7    UCS    0  0  en2 
192.168.195  link#7    UCS    3  0  en2 
192.168.195.1  0:27:22:67:35:ee UHLWIi   22  397  en2 1193 
192.168.195.5  127.0.0.1   UHS    0  0  lo0 

More result is truncated....... 

La dirección IP de la puerta de enlace está en la primera línea; uno con el valor predeterminado en su primera columna.

Para mostrar sólo las líneas seleccionadas de resultado, podemos utilizar comando grep junto con netstat

netstat -rn | grep 'default' 

Este filtra el comando y muestra las líneas de resultado que tiene por defecto. En este caso, se puede ver como el resultado siguiente:

default   192.168.195.1  UGSc   14  0  en2 

Si usted está interesado en encontrar sólo la dirección IP de la pasarela y nada más puede filtrar aún más el resultado utilizando awk. El comando awk coincide con el patrón en el resultado de entrada y muestra el resultado. Esto puede ser útil cuando usa su resultado directamente en algún programa o trabajo por lotes.

netstat -rn | grep 'default' | awk '{print $2}' 

El comando awk dice que partido e imprimir la segunda columna del resultado en el texto. Así pues, el resultado final se ve así:

192.168.195.1 

En este caso, netstat muestra todo el resultado, grep sólo selecciona la línea con 'default' en él, y awk coincide aún más el patrón para mostrar la segunda columna en el texto .

De forma similar puede usar la ruta -n obtener el comando predeterminado para obtener el resultado deseado. El comando completo es

route -n get default | grep 'gateway' | awk '{print $2}' 

Estos comandos funcionan bien en Linux y en sistemas Unix y MAC OS.

4

La utilidad grep no es necesaria. Awk puede hacerlo todo:

netstat -rn | awk '/default/ {print $2}' 
     192.168.128.1 

Tenga en cuenta que si usted tiene algo así como Parallels (o una VPN, o ambos) que se ejecuta, puede ver dos o más entradas de enrutamiento por defecto - que será cierto si se utiliza el " La sugerencia de grep también.

netstat -rn | awk '/default/ {print $2}' 
     192.168.128.1 
     link#12 

y

netstat -rn | awk '/default/ {print $2}'        
     utun1 
     192.168.128.1 
     link#12 

Para establecer una variable (_default) para su uso posterior (suponiendo que sólo una entrada de 'default') .....

_default=$(netstat -rn inet | awk '/default/ {print $2}') # I prefer $(...) over back-ticks 

En el caso uso de múltiples rutas predeterminadas:

netstat -rn | awk '/default/ {if (index($6, "en") > 0){print $2} }' 
     192.168.128.1 

Estos ejemplos es probado en Mavericks Terminal.app y es específico solo de OSX. Por ejemplo, otras versiones de * nix frecuentemente usan 'eth' para conexiones ethernet/inalámbricas, no 'en'. Esto también solo se prueba con ksh. Otros shells pueden necesitar una sintaxis ligeramente diferente.

Cuestiones relacionadas