Comment obtenir la passerelle par défaut dans Mac OSX

Je dois récupérer la passerelle par défaut sur une machine Mac. Je sais que sous Linux route -n donnera une sortie à partir de laquelle je peux facilement récupérer ces informations. Cependant, cela ne fonctionne pas sous Mac OSX (Snow Leopard).

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

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

Vous pouvez essayer avec:

 route -n get default 

Ce n’est pas la même chose que la route -n GNU / Linux (ou même ip route show ) mais est utile pour vérifier les informations de route par défaut. En outre, vous pouvez vérifier l’itinéraire que les packages vont prendre 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:  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 réseau de MacOSX (*) utilise la sortie de netstat pour afficher les informations de routage. Capture d'écran de l'utilitaire réseau affichant les informations de la table de routage

J’espère que ça aide 🙂

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

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 requirejs. Le résultat de l’échantillon 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 par défaut. 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é à trouver uniquement 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 modèle dans le résultat d’entrée et affiche la sortie. 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 indique pour correspondre et imprimer 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 «default», et awk correspond au modèle pour afficher la deuxième colonne du texte.

Vous pouvez également utiliser la commande route -n get default pour obtenir le résultat requirejs. La commande complète est

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

Ces commandes fonctionnent bien dans les systèmes Linux, Unix et MAC.

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 ou plusieurs entrées de routage par défaut – ce sera également vrai si vous utilisez la suggestion ‘grep’ ci-dessus.

  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 une seule entrée pour ‘default’) …..

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

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

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

Ces exemples ont été 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, pas «en». Ceci est également testé uniquement avec ksh. D’autres shells peuvent nécessiter une syntaxe légèrement différente.

Je voudrais utiliser quelque chose dans ce sens …

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