web-dev-qa-db-ja.com

Mac OSXでデフォルトゲートウェイを取得する方法

Macマシンでデフォルトゲートウェイを取得する必要があります。 Linuxのroute -nは、この情報を簡単に取得できる出力を提供することを知っています。ただし、これはMac OSX(Snow Leopard)では機能しません。

netstat -nr | grep 'default'も試しましたが、Linux/Unixのroute -nによって生成されるような、よりクリーンな出力を期待していました。 netstat -nrは、すべてのインターフェイスとそれらのデフォルトゲートウェイをリストします。

正しい方向へのあらゆる種類の提案やヒントを歓迎します。

115
SThomas

あなたは試すことができます:

route -n get default

GNU/Linuxのroute -n(またはip route showでも)とは異なりますが、デフォルトのルート情報を確認するのに役立ちます。また、パッケージが特定のホストに到達するルートを確認できます。例えば。

route -n get www.yahoo.com

出力は次のようになります。

   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

私見netstat -nrはあなたが必要なものです。 MacOSXのネットワークユーティリティapp(*)でさえ、netstatの出力を使用してルーティング情報を表示します。 Network utility screenshot displaying routing table information

これが役立つことを願っています:)

(*)open /Applications/Utilities/Network\ Utility.appでネットワークユーティリティを起動できます

178
Humber

関連するIPアドレスのリストを取得するには、netstatコマンドを使用できます

netstat -rn 

これにより、IPアドレスの長いリストが表示され、必要なフィールドを見つけるのは簡単ではありません。サンプル結果は次のとおりです。

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

ゲートウェイのIPアドレスは最初の行にあります。最初の列にデフォルトがあるもの。

結果の選択された行のみを表示するには、netstatとともにgrepコマンドを使用します。

netstat -rn | grep 'default'

このコマンドは、デフォルトを持つ結果の行をフィルタリングして表示します。この場合、次のような結果が表示されます。

default            192.168.195.1      UGSc           14        0     en2

ゲートウェイのIPアドレスのみを検索することに興味があり、他に何もない場合は、awkを使用して結果をさらにフィルタリングできます。 awkコマンドは、入力結果のパターンと一致し、出力を表示します。これは、プログラムまたはバッチジョブで結果を直接使用する場合に役立ちます。

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

Awkコマンドは、テキスト内の結果を2列目と一致させて印刷するを指示します。したがって、最終結果は次のようになります。

192.168.195.1

この場合、netstatはすべての結果を表示し、grepは 'default'を含む行のみを選択し、awkはさらにパターンに一致してテキストの2番目の列を表示します。

同様にroute -n get defaultコマンドを使用して、必要な結果を取得できます。完全なコマンドは

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

これらのコマンドは、UNIXシステムとMAC OSだけでなく、Linuxでもうまく機能します。

35
Prabhu

Grepユーティリティは必要ありません。 Awkはすべてを実行できます。

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

Parallels(またはVPN、またはその両方)のようなものを実行している場合、2つ以上のデフォルトのルーティングエントリが表示されることがあります。上記の「grep」の提案を使用する場合も同様です。

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

そして

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

さらに使用するために変数(_default)を設定するには( 'default'に1つのエントリのみを想定).....

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

複数のデフォルトルートを使用する場合:

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

これらの例は、Mavericks Terminal.appでテストされており、OSX専用です。たとえば、他の* nixバージョンでは、「en」ではなく「eth」をイーサネット/ワイヤレス接続に頻繁に使用します。これもkshでのみテストされます。他のシェルでは、わずかに異なる構文が必要になる場合があります。

7
Concertogr

これらの線に沿って何かを使用します...

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