137 votes

Comment obtenir la passerelle par défaut dans Mac OSX

J'ai besoin de 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 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 propre comme celle produite par route -n dans Linux/Unix. netstat -nr liste toutes les interfaces et leur passerelle par défaut.

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

3 votes

Migrer vers SuperUser ?

3 votes

Pour votre information, vous pouvez cliquer sur l'icône WiFi de la barre d'état avec la touche Option +. Cela affiche des informations supplémentaires, y compris la passerelle.

222voto

Humber Points 988

Vous pouvez essayer avec :

route -n get default

Ce n'est pas le même que celui de GNU/Linux. route -n (ou même ip route show ) mais est utile pour vérifier les informations sur les routes par défaut. Vous pouvez également vérifier la route que les paquets prendront vers 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 cela vous aidera :)

(*) Vous pouvez lancer l'utilitaire Network avec open /Applications/Utilities/Network\ Utility.app

0 votes

Merci. Vous venez de m'épargner quelques heures dans ma nouvelle maison quand le modem de Time Warner a décidé qu'il voulait l'IP que mon routeur avait, et que ifconfig a menti sur la passerelle.

46voto

Prabhu Points 840

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

netstat -rn 

Cela donne une longue liste d'adresses IP et il n'est pas facile de trouver le champ requis. L'exemple de résultat 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 ; celle avec le défaut dans sa première colonne.

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

netstat -rn | grep 'default'

Cette commande filtre et affiche ces lignes de résultat par défaut. Dans ce cas, vous pouvez voir le résultat suivant :

default            192.168.195.1      UGSc           14        0     en2

Si vous souhaitez 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 à un motif 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 à 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 contenant 'default', et awk poursuit la correspondance avec le motif pour afficher la deuxième colonne du texte.

Vous pouvez également 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 dans linux ainsi que dans les systèmes unix et MAC OS.

11voto

Concertogr Points 1

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 vrai si vous utilisez la suggestion 'grep' ci-dessus, aussi.

    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

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

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

En cas d'utilisation de plusieurs routes par défaut :

    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, les 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 nécessiter une syntaxe légèrement différente.

5voto

Hmm Points 1188

J'utiliserais quelque chose de ce genre...

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

0 votes

Comment pouvons-nous réaliser cela en programmation objective-c. Existe-t-il un cadre pour cela ?

3voto

James Nick Points 11

Utilisation des préférences du système :

Étape 1 : Cliquez sur l'icône Apple (en haut à gauche de l'écran) et sélectionnez Préférences Système.

Étape 2 : Cliquez sur Réseau.

Étape 3 : Sélectionnez votre connexion réseau, puis cliquez sur Avancé.

Étape 4 : Sélectionnez l'onglet TCP/IP et trouvez l'adresse IP de votre passerelle à côté de Routeur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X