Mac OS X 终端下怎么获取当前使用的network service? 例如当前使用的连接服务名是「Wi-Fi」,终端中怎么获取?


如题,在终端中使用 networksetup 命令可以对网络服务(network service)进行设置,例如更改DNS等。

手册中有几个选项例如 -listnetworkserviceorder , -listallnetworkservices 可以列出现在所有的network service信息,但是看了一遍没有找到获取当前正在使用的service的方法。

例如当前使用的服务名为「Wi-Fi」,通过什么命令能获取到?

参见手册 networksetup

获取所有的network service
获取所有的network service

实际当前使用的network service
实际当前使用的network service

对network service进行操作
对network service进行操作

现在就是不知道怎么获取当前使用的service。

network shell terminal macosx

万年不改名 10 years, 4 months ago

Macosx的Preformance并不是封装networksetup命令实现的。所以命令并不能完全达到你要求的结果。

如果是用shell,遍历service,简单的,grep判断-getinfo输出是否带有IP address判断,比如
networksetup getinfo "WI-FI"|grep -c "IP address:\W[1-9]",如果稍微认真点,就获取ip和route,Ping一下。

要是用代码实现,你可以参考下CFNetServices。

泥浆,衣袋。 answered 10 years, 4 months ago

首先要明白一点,不存在什么“当前service”,多个service可以同时是活跃的,用于连接不同的网络,IP包会根据路由表找到合适的interface。
下面说你的问题, networksetup -listnetworkserviceorder 可以列出每个service对应的interface名字, ifconfig 可以列出每个名字对应的IP地址以及是否活跃/连接等状态, netstat -r 可以列出路由表。
有了这些信息,你要做的事情就可以解决了。

爱上未来的你 answered 10 years, 4 months ago

Your Answer