Comment obtenir la passerelle par défaut sous Mac OSX

119

J'ai besoin de récupérer la passerelle par défaut sur une machine Mac. Je sais que dans la route Linux -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', mais j'espérais une sortie plus propre comme celle produite par route -nLinux / Unix. netstat -nrrépertorie toutes les interfaces et leur passerelle par défaut.

Tout type de suggestion ou un indice dans la bonne direction sera apprécié.

SThomes
la source
3
Migrer vers SuperUser?
JMD
3
FYI, vous pouvez Option + cliquer sur l'icône WiFi dans la barre d'état. Cela affiche des informations supplémentaires, y compris la passerelle.
Petr Újezdský

Réponses:

189

Vous pouvez essayer avec:

route -n get default

Ce n'est pas la même chose que GNU / Linux route -n(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 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 -nrest 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. Capture d'écran de l'utilitaire réseau affichant les informations de la table de routage

J'espère que ça aide :)

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

Humber
la source
Merci. Vous venez de me faire gagner quelques heures dans la nouvelle maison lorsque le modem de Time Warner a décidé qu'il voulait l'IP de mon routeur, et ifconfig a menti à propos de la passerelle.
Chris Doggett
38

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'é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 sur la première ligne; un avec la valeur par défaut dans sa première colonne.

Pour n'afficher que 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 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 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 de faire correspondre et d'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 sélectionne uniquement la ligne contenant «default», et awk correspond davantage au modèle pour afficher la deuxième colonne dans le texte.

Vous pouvez de même utiliser la commande route -n get default pour obtenir le résultat requis. La commande complète est

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

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

Prabhu
la source
8

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

Concertogr
la source
3

J'utiliserais quelque chose de ce genre ...

 netstat -rn | grep "default" | awk '{print $2}'
Robert Northard
la source
Comment pouvons-nous y parvenir dans la programmation objectif-c. Y a-t-il un cadre pour cela
MacDeveloper
0

Utilisation des préférences 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 recherchez l'adresse IP de votre passerelle dans la liste en regard de Routeur.

James Nick
la source