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.
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.
J'espère que ça aide :)
(*) Vous pouvez démarrer 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 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.
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.
Je voudrais utiliser quelque chose dans ce sens ...
netstat -rn | grep "default" | awk '{print $2}'