我需要在 Mac 机器上检索默认网关。我知道在 Linux 中 route -n 会给出一个输出,我可以很容易地从中检索到这些信息。但是,这在 Mac OSX(Snow Leopard) 中不起作用。
我也试过了,但我希望得到像Linux/Unixnetstat -nr | grep 'default'
中产生的更清晰的输出。列出所有接口和它们的默认网关。route -n
netstat -nr
任何形式的建议或正确方向的提示将不胜感激。
您可以尝试:
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 的输出来显示路由信息。
我希望这有帮助 :)
(*) 您可以使用以下命令启动网络实用程序open /Applications/Utilities/Network\ Utility.app
要获取关联的 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进一步过滤结果。awk 命令匹配输入结果中的模式并显示输出。当您直接在某些程序或批处理作业中使用结果时,这可能很有用。
netstat -rn | grep 'default' | awk '{print $2}'
awk 命令告诉在文本中匹配并打印结果的第二列。因此,最终结果如下所示:
192.168.195.1
在这种情况下,netstat 显示所有结果,grep 只选择其中包含 'default' 的行,而 awk 进一步匹配模式以显示文本中的第二列。
您可以类似地使用 route -n get default 命令来获得所需的结果。完整的命令是
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”建议,情况也会如此。
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 可能需要稍微不同的语法。
我会使用这些方面的东西......
netstat -rn | grep "default" | awk '{print $2}'
使用系统偏好:
第 1 步:单击 Apple 图标(位于屏幕左上方)并选择系统偏好设置。
第二步:点击网络。
第 3 步:选择您的网络连接,然后单击高级。
第 4 步:选择 TCP/IP 选项卡并找到路由器旁边列出的网关 IP 地址。