如何在Mac OSX中获取默认网关

STh*_*mas 116 macos netstat routes ifconfig

我需要在Mac机器上检索默认网关.我知道在Linux中,-n将给出一个输出,我可以从中轻松检索到这些信息.但是这在Mac OSX(Snow Leopard)中不起作用.

我也尝试过netstat -nr | grep 'default',但我希望得到一个像route -nLinux/Unix 那样的清晰输出.netstat -nr列出所有接口和默认网关.

任何形式的建议或正确方向的提示将不胜感激.

Hum*_*ber 183

您可以尝试:

route -n get default
Run Code Online (Sandbox Code Playgroud)

它与GNU/Linux route -n(甚至ip route show)不同,但对于检查默认路由信息很有用.此外,您还可以检查程序包将路由到特定主机的路由.例如

route -n get www.yahoo.com
Run Code Online (Sandbox Code Playgroud)

输出类似于:

   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
Run Code Online (Sandbox Code Playgroud)

恕我直言netstat -nr是你需要的.甚至MacOSX的网络实用程序应用程序(*)也使用netstat的输出来显示路由信息. 网络实用程序截图显示路由表信息

我希望这有帮助 :)

(*)您可以使用启动网络实用程序 open /Applications/Utilities/Network\ Utility.app


Pra*_*bhu 37

要获取关联的IP地址列表,可以使用netstat命令

netstat -rn 
Run Code Online (Sandbox Code Playgroud)

这给出了很长的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.......
Run Code Online (Sandbox Code Playgroud)

网关的IP地址在第一行; 一个在第一列有默认值.

要仅显示选定的结果行,我们可以使用grep命令和netstat

netstat -rn | grep 'default'
Run Code Online (Sandbox Code Playgroud)

此命令过滤并显示具有默认值的结果行.在这种情况下,您可以看到如下结果:

default            192.168.195.1      UGSc           14        0     en2
Run Code Online (Sandbox Code Playgroud)

如果您只想查找网关的IP地址而没有其他任何内容,您可以使用awk进一步过滤结果.awk命令匹配输入结果中的pattern并显示输出.当您在某个程序或批处理作业中直接使用结果时,这非常有用.

netstat -rn | grep 'default' | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)

awk命令告诉匹配并打印文本中结果的第二列.因此最终结果如下:

192.168.195.1
Run Code Online (Sandbox Code Playgroud)

在这种情况下,netstat显示所有结果,grep只选择其中包含'default'的行,awk进一步匹配模式以显示文本中的第二列.

您可以类似地使用route -n get default命令来获取所需的结果.完整的命令是

route -n get default | grep 'gateway' | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)

这些命令在linux以及unix系统和MAC OS中运行良好.


Con*_*ogr 8

不需要grep实用程序.Awk可以做到这一切:

    netstat -rn | awk '/default/ {print $2}'
      192.168.128.1
Run Code Online (Sandbox Code Playgroud)

请注意,如果您运行Parallels(或VPN或两者)之类的东西,您可能会看到两个或更多默认路由条目 - 如果您使用上面的'grep'建议也是如此.

    netstat -rn | awk '/default/ {print $2}'
      192.168.128.1
      link#12
Run Code Online (Sandbox Code Playgroud)

    netstat -rn | awk '/default/ {print $2}'                             
      utun1
      192.168.128.1
      link#12
Run Code Online (Sandbox Code Playgroud)

设置变量(_default)以供进一步使用(假设只有一个条目为'default').....

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

在多个默认路由的情况下使用:

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

这些示例在Mavericks Terminal.app中进行了测试,仅针对OSX.例如,其他*nix版本经常使用'eth'进行以太网/无线连接,而不是'en'.这也只是用ksh测试的.其他shell可能需要稍微不同的语法.


Rob*_*ard 5

我会沿着这些路线使用一些东西......

 netstat -rn | grep "default" | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)