我需要在Mac机器上检索默认网关。我知道在Linux中,路由-n将给出输出,我可以从中轻松检索此信息。但是,这在Mac OSX(雪豹)中不起作用。
我也尝试过netstat -nr | grep 'default'
,但是我希望获得更干净的输出,例如route -n
Linux / Unix 中产生的输出。netstat -nr
列出所有接口和它们的默认网关。
任何朝正确方向提出的建议或暗示将不胜感激。
我需要在Mac机器上检索默认网关。我知道在Linux中,路由-n将给出输出,我可以从中轻松检索此信息。但是,这在Mac OSX(雪豹)中不起作用。
我也尝试过netstat -nr | grep 'default'
,但是我希望获得更干净的输出,例如route -n
Linux / Unix 中产生的输出。netstat -nr
列出所有接口和它们的默认网关。
任何朝正确方向提出的建议或暗示将不胜感激。
Answers:
您可以尝试:
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的Network Utility应用程序(*)都使用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仅选择其中带有“默认”的行,而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,或同时运行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进行测试。其他外壳可能需要稍微不同的语法。
我会沿用这些东西...
netstat -rn | grep "default" | awk '{print $2}'