Cómo obtener la puerta de enlace predeterminada en Mac OSX


119

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

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

Se agradecerá cualquier tipo de sugerencia o pista en la dirección correcta.


3
¿Migrar a SuperUser?
JMD

3
Para su información, puede Opción + clic en el icono de WiFi en la barra de estado. Esto muestra información adicional, incluida la puerta de enlace.
Petr Újezdský

Respuestas:


189

Puedes probar con:

route -n get default

No es lo mismo que GNU / Linux route -n(o incluso ip route show) pero es útil para verificar la información de ruta predeterminada. Además, puede verificar la ruta que tomarán los paquetes 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

En mi humilde opinión netstat -nres lo que necesitas. Incluso la aplicación de utilidad de red de MacOSX (*) utiliza la salida de netstat para mostrar información de enrutamiento. Captura de pantalla de la utilidad de red que muestra información de la tabla de enrutamiento

Espero que esto ayude :)

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


Gracias. Acabas de ahorrarme unas horas en la nueva casa cuando el módem de Time Warner decidió que quería la IP que solía tener mi enrutador, e ifconfig mintió sobre la puerta de enlace.
Chris Doggett

38

Para obtener la lista de direcciones IP asociadas, puede usar el comando netstat

netstat -rn 

Esto da una lista larga 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 solo las líneas seleccionadas de resultado, podemos usar el comando grep junto con netstat

netstat -rn | grep 'default'

Este comando filtra y muestra las líneas de resultado que tienen valores predeterminados. En este caso, puede ver un resultado como el siguiente:

default            192.168.195.1      UGSc           14        0     en2

Si está interesado en encontrar solo la dirección IP de la puerta de enlace y nada más, puede filtrar 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 está utilizando su resultado directamente en algún programa o trabajo por lotes.

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

El comando awk dice que coincida e imprima la segunda columna del resultado en el texto. Por tanto, el resultado final se ve así:

192.168.195.1

En este caso, netstat muestra todos los resultados, grep solo selecciona la línea con 'default' y awk coincide con el patrón para mostrar la segunda columna en el texto.

De manera similar, puede usar el comando route -n get default para obtener el resultado requerido. El comando completo es

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

Estos comandos funcionan bien en Linux, así como en sistemas Unix y MAC OS.


8

No se necesita la utilidad grep. Awk puede hacerlo todo:

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

Tenga en cuenta que si tiene algo como Parallels (o una VPN, o ambos) en ejecución, es posible que vea dos o más entradas de enrutamiento predeterminadas; será cierto si también usa la sugerencia 'grep' anterior.

    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 configurar una variable (_default) para uso posterior (asumiendo solo una entrada para 'default') .....

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

En el caso de varias rutas predeterminadas, utilice:

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

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


3

Usaría algo en esta línea ...

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

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

0

Uso de las preferencias del sistema:

Paso 1: haga clic en el icono de Apple (en la parte superior izquierda de la pantalla) y seleccione Preferencias del sistema.

Paso 2: haz clic en Red.

Paso 3: Seleccione su conexión de red y luego haga clic en Avanzado.

Paso 4: Seleccione la pestaña TCP / IP y busque la dirección IP de su puerta de enlace que aparece junto a Enrutador.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.