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

我需要检索Mac机器上的默认网关。 我知道,在Linux路由-n会给出一个输出,我可以很容易地检索这些信息。 但是,这不适用于Mac OSX(雪豹)。

我也试过netstat -nr | grep 'default' netstat -nr | grep 'default' ,但是我希望在Linux / Unix下能够得到类似于route -n所产生的清洁输出。 netstat -nr列出了它们的所有接口和默认网关。

任何forms的build议或正确方向的暗示将不胜感激。

  • 我怎样才能使目录可写?
  • mongodb数据库在mac上的位置
  • 如何使一个shell脚本全球?
  • 如何更改从/ usr / libexec / java_home返回的Mac OS的默认Java VM
  • 任何方式来防止OS X狮子Safari浏览器上的水平滚动触发滑回手势?
  • 如何在OSX中使用terminal向上移动目录
  • 在Mac上安装R - 警告消息:设置LC_CTYPE失败,使用“C”
  • Mavericks上的MAMP Pro 3.05更新到优胜美地 - Apache无法启动
  • 4 Solutions collect form web for “如何在Mac OSX中获取默认网关”

    你可以尝试:

     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的networking实用程序应用程序(*)使用netstat的输出来显示路由信息。 网络实用程序截图显示路由表信息

    我希望这有帮助 :)

    (*)您可以open /Applications/Utilities/Network\ Utility.app启动networking实用open /Applications/Utilities/Network\ Utility.app

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

     netstat -rn 

    这给出了一长串的IP地址,并不容易find所需的字段。 示例结果如下:

     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地址在第一行; 一个在第一列默认。

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

     netstat -rn | grep 'default' 

    这个命令过滤并显示那些有默认结果的行。 在这种情况下,您可以看到如下结果:

     default 192.168.195.1 UGSc 14 0 en2 

    如果你有兴趣只find网关的IP地址,没有别的,你可以使用awk进一步过滤结果。 awk命令匹配input结果中的模式并显示输出。 当您在某些程序或批处理作业中直接使用结果时,这会很有用。

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

    awk命令告诉匹配和打印文本中结果的第二列 。 最终结果如下所示:

     192.168.195.1 

    在这种情况下,netstat显示所有的结果,grep只select'default'的行,awk进一步匹配模式显示文本中的第二列。

    你可以同样使用route -n获取默认命令来获得所需的结果。 完整的命令是

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

    这些命令在linux以及unix系统和MAC OS上都能正常工作。

    grep工具是不需要的。 Awk可以做到这一切:

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

    请注意,如果您有类似Parallels(或VPN,或两者都在运行)的东西,则可能会看到两个或更多个默认路由条目 – 如果您也使用上面的“grep”build议,则也是如此。

      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 

    要设置一个variables(_default)供进一步使用(假设只有一个条目为“默认”)…..

      _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中进行了testing,仅针对OSX。 例如,其他* nix版本经常使用“eth”进行以太网/无线连接,而不是“en”。 这也只能用ksh进行testing。 其他shell可能需要稍微不同的语法。

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

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