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

我需要检索 Mac 机器上的默认网关。我知道在 Linux path-n 中将提供一个输出,从中可以很容易地检索到这些信息。然而,这在 MacOSX (雪豹)中不起作用。

我也尝试了 netstat -nr | grep 'default',但是我希望它能够像 Linux/Unix 中的 route -n那样产生一个更干净的输出。netstat -nr列出了所有的接口和它们的默认网关。

任何正确方向的建议或提示都会受到欢迎。

248690 次浏览

你可以试试:

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

IMHO netstat -nr就是你所需要的,甚至 MacOSX 的网络应用程序(*)也使用 netstat 的输出来显示路由信息。 Network utility screenshot displaying routing table information

我希望这有所帮助:)

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

我会用类似这样的东西..。

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

要获得相关的 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 地址在第一行; 默认的在第一列。

为了只显示选定的结果行,我们可以使用 Grep命令和 Netstat命令

netstat -rn | grep 'default'

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

default            192.168.195.1      UGSc           14        0     en2

如果您只想查找网关的 ip 地址,而不想查找其他内容,那么可以使用 进一步过滤结果。Awk 命令匹配输入结果中的模式并显示输出。当您在某些程序或批处理作业中直接使用结果时,这可能非常有用。

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

Awk 命令告诉 匹配并打印第二列文本中的结果:

192.168.195.1

在本例中,netstat 显示所有结果,grep 只选择包含“ default”的行,awk 进一步匹配模式以显示文本中的第二列。

类似地,您可以使用 path-n get default 命令来获得所需的结果

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

这些命令在 linux、 unix 系统和 MAC 操作系统中运行良好。

Grep 实用程序是不需要的。 Awk 可以做到这一切:

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

请注意,如果您有类似 Parallels (或 VPN,或两者都有)的东西运行,您可能会看到两个或更多的默认路由条目-如果您使用上面的“ 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’) ... ..。

    _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 版本经常在以太网/无线连接中使用‘ eth’,而不是‘ en’。 这也只能用 ksh 进行测试,其他 shell 可能需要稍微不同的语法。

使用系统设定:

步骤1: 单击 Apple 图标(在屏幕的左上角)并选择 System Preferences。

步骤2: 单击“网络”。

步骤3: 选择网络连接,然后单击“高级”。

步骤4: 选择 TCP/IP 选项卡,找到路由器旁边列出的网关 IP 地址。