Como obter o gateway padrão no Mac OSX

119

Preciso recuperar o gateway padrão em uma máquina Mac. Eu sei que no Linux, a rota -n dará uma saída da qual eu posso facilmente recuperar esta informação. No entanto, isso não está funcionando no Mac OSX (Snow Leopard).

Eu também tentei netstat -nr | grep 'default', mas esperava uma saída mais limpa como a produzida pelo route -nLinux / Unix. netstat -nrlista todas as interfaces e o gateway padrão para elas.

Qualquer tipo de sugestão ou dica na direção certa será apreciada.

SThomas
fonte
3
Migrar para SuperUser?
JMD de
3
FYI você pode Option + clicar no ícone WiFi na barra de status. Isso mostra informações adicionais, incluindo gateway.
Petr Újezdský de

Respostas:

189

Você pode tentar com:

route -n get default

Não é o mesmo que GNU / Linux route -n(ou mesmo ip route show), mas é útil para verificar as informações de rota padrão. Além disso, você pode verificar a rota que os pacotes seguirão para um determinado host. Por exemplo

route -n get www.yahoo.com

A saída seria semelhante 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

IMHO netstat -nré o que você precisa. Até mesmo o aplicativo de utilitário de rede do MacOSX (*) usa a saída de netstat para mostrar informações de roteamento. Captura de tela do utilitário de rede exibindo informações da tabela de roteamento

Eu espero que isso ajude :)

(*) Você pode iniciar o utilitário de rede com open /Applications/Utilities/Network\ Utility.app

Humber
fonte
Obrigado. Você acabou de me economizar algumas horas na nova casa quando o modem da Time Warner decidiu que queria o IP que meu roteador costumava ter, e ifconfig mentiu sobre o gateway.
Chris Doggett de
38

Para obter a lista de endereços IP associados, você pode usar o comando netstat

netstat -rn 

Isso fornece uma longa lista de endereços IP e não é fácil encontrar o campo obrigatório. O resultado da amostra é o seguinte:

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.......

O endereço IP do gateway está na primeira linha; um com padrão em sua primeira coluna.

Para exibir apenas as linhas de resultado selecionadas, podemos usar o comando grep junto com o netstat

netstat -rn | grep 'default'

Este comando filtra e exibe as linhas de resultado que possuem o padrão. Neste caso, você pode ver o resultado como o seguinte:

default            192.168.195.1      UGSc           14        0     en2

Se você estiver interessado em encontrar apenas o endereço IP do gateway e nada mais, você pode filtrar ainda mais o resultado usando awk . O comando awk corresponde ao padrão no resultado de entrada e exibe a saída. Isso pode ser útil quando você está usando o resultado diretamente em algum programa ou trabalho em lote.

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

O comando awk diz para combinar e imprimir a segunda coluna do resultado no texto. O resultado final é assim:

192.168.195.1

Neste caso, netstat exibe todos os resultados, grep apenas seleciona a linha com 'default' nele, e awk ainda corresponde ao padrão para exibir a segunda coluna no texto.

Você pode usar o comando route -n get default para obter o resultado necessário. O comando completo é

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

Esses comandos funcionam bem no Linux, bem como em sistemas Unix e MAC OS.

Prabhu
fonte
8

O utilitário grep não é necessário. Awk pode fazer tudo:

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

Observe que se você tiver algo como Parallels (ou VPN, ou ambos) em execução, poderá ver duas ou mais entradas de roteamento padrão - será verdade se você usar a sugestão 'grep' acima também.

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

e

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

Para definir uma variável (_default) para uso posterior (assumindo apenas uma entrada para 'padrão') .....

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

No caso de múltiplas rotas padrão, use:

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

Esses exemplos testados em Mavericks Terminal.app e são específicos apenas para OSX. Por exemplo, outras versões * nix freqüentemente usam 'eth' para conexões ethernet / wireless, não 'en'. Isso também só é testado com ksh. Outros shells podem precisar de uma sintaxe ligeiramente diferente.

Concertogr
fonte
3

Eu usaria algo nesse sentido ...

 netstat -rn | grep "default" | awk '{print $2}'
Robert Northard
fonte
Como podemos conseguir isso na programação objetivo-c. Existe alguma moldura para isso
MacDeveloper
0

Usando as Preferências do Sistema:

Etapa 1: Clique no ícone Apple (na parte superior esquerda da tela) e selecione Preferências do Sistema.

Etapa 2: Clique em Rede.

Etapa 3: Selecione sua conexão de rede e clique em Avançado.

Etapa 4: Selecione a guia TCP / IP e encontre o endereço IP do gateway listado ao lado de Roteador.

James Nick
fonte