web-dev-qa-db-fra.com

Comment obtenir la passerelle par défaut sous Mac OSX

J'ai besoin de récupérer la passerelle par défaut sur un ordinateur Mac. Je sais que sous Linux route -n donnera une sortie à partir de laquelle je pourrai facilement récupérer cette information. Cependant, cela ne fonctionne pas sous Mac OSX (Snow Leopard).

J'ai aussi essayé netstat -nr | grep 'default', mais j'espérais une sortie plus nette, comme celle produite par route -n sous Linux/Unix. netstat -nr répertorie toutes les interfaces et la passerelle par défaut pour celles-ci.

Toute suggestion ou suggestion dans la bonne direction sera appréciée.

116
SThomas

Vous pouvez essayer avec:

route -n get default

Ce n'est pas la même chose que le route -n de GNU/Linux (ou même le ip route show), mais il est utile pour vérifier les informations de route par défaut. En outre, vous pouvez vérifier l'itinéraire que les packages prendront pour un hôte particulier. Par exemple.

route -n get www.yahoo.com

La sortie serait similaire à:

   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 est ce dont vous avez besoin. Même l'application utilitaire réseau de MacOSX (*) utilise la sortie de netstat pour afficher les informations de routage. Network utility screenshot displaying routing table information

J'espère que ça aide :)

(*) Vous pouvez démarrer l’utilitaire réseau avec open /Applications/Utilities/Network\ Utility.app

182
Humber

Pour obtenir la liste des adresses IP associées, vous pouvez utiliser la commande netstat

netstat -rn 

Cela donne une longue liste d'adresses IP et il n'est pas facile de trouver le champ requis. Le résultat de l'exemple est le suivant:

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

L'adresse IP de la passerelle est dans la première ligne; un avec défaut à sa première colonne.

Pour afficher uniquement les lignes de résultat sélectionnées, nous pouvons utiliser la commande grep avec netstat

netstat -rn | grep 'default'

Cette commande filtre et affiche les lignes de résultat ayant default. Dans ce cas, vous pouvez voir le résultat comme suit:

default            192.168.195.1      UGSc           14        0     en2

Si vous êtes intéressé à ne trouver que l'adresse IP de la passerelle et rien d'autre, vous pouvez filtrer davantage le résultat en utilisant awk. La commande awk correspond au motif dans le résultat d'entrée et affiche le résultat. Cela peut être utile lorsque vous utilisez votre résultat directement dans un programme ou un travail par lots.

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

La commande awk dit à correspond et affiche la deuxième colonne du résultat dans le texte. Le résultat final ressemble donc à ceci:

192.168.195.1

Dans ce cas, netstat affiche tous les résultats, grep ne sélectionne que la ligne avec la valeur 'default', et awk fait ensuite correspondre le modèle pour afficher la deuxième colonne du texte.

De même, vous pouvez utiliser la commande route -n get default pour obtenir le résultat souhaité. La commande complète est

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

Ces commandes fonctionnent bien sous Linux ainsi que sous les systèmes Unix et MAC OS.

36
Prabhu

L'utilitaire grep n'est pas nécessaire. Awk peut tout faire:

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

Notez que si vous avez quelque chose comme Parallels (ou un VPN, ou les deux) en cours d'exécution, vous pouvez voir deux entrées de routage par défaut ou plus - ce sera le cas si vous utilisez la suggestion 'grep' ci-dessus également.

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

et

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

Pour définir une variable (_default) pour une utilisation ultérieure (en supposant qu'une seule entrée pour 'default') .....

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

Dans le cas de plusieurs itinéraires par défaut, utilisez:

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

Ces exemples testés dans Mavericks Terminal.app et sont spécifiques à OSX uniquement. Par exemple, d'autres versions * nix utilisent fréquemment "eth" pour les connexions Ethernet/sans fil, et non "en". Ceci est également testé uniquement avec ksh. D'autres shells peuvent avoir besoin d'une syntaxe légèrement différente.

8
Concertogr

Je voudrais utiliser quelque chose dans ce sens ...

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