如何从命令行判断OS X是否已连接到VPN网络?


12

如何从命令行判断OS X是否已连接到VPN网络?

通过ifconfig在连接时不带任何参数的情况下运行,我看到有一个utun0接口似乎是VPN连接。当我断开连接时,它消失了。

我相信我可以使用这样的东西来检查字符串utun0并计算出现次数:

ifconfig | grep -c utun0

但是,有没有更简单或更有效的方法来进行检查?如果utun0是设备,甚至是伪设备,我是否应该使用类似以下内容检查它是否存在:

if [ -a '/dev/utun0' ]

不幸的是,在连接和断开连接时,我没有看到该目录中的任何更改,只是看穿/dev/tun0/dev/tun15cat即使使用sudo... 也无法看到它们。

有没有更简单的方法来判断我是否有VPN连接?


什么样的VPN?您在“ 系统偏好设置”中配置的内置组件?
丹尼尔·贝克

@DanielBeck是的
CWD

Answers:


10

从Mountain Lion 1开始,您还可以使用scutil命令。

例如:

$ scutil --nc list | grep Connected

有关更多详细的帮助,请参见手册页或运行:

$ scutil --nc help

脚注:

  1. 我不知道Mountain Lion之前的OSX版本中存在此命令,但是我可能错了。

0

由于您是通过“系统偏好设置”定义接口的,因此执行此操作的一种简单方法是使用AppleScript。这是一个片段,可以完成您想做的事情:

# Get the major version number. Mavericks changes the way things are done.
set osversion to do shell script "sw_vers 2>/dev/null | awk '/ProductVersion/ { print $2    }' | cut -f 2 -d ."
if osversion is less than 9 then
    set vpntype to 10
else
    set vpntype to 11
end if
try
    tell application "System Events"
        tell current location of network preferences
            set vpnservice to (name of first service whose kind is vpntype) as string
            set myConnection to the service vpnservice
            if myConnection is not null then
                if current configuration of myConnection is not connected then
                    return "Not Connected"
                else
                    return "Connected"
                end if
            end if
        end tell
    end tell
on error error_message
    return error_message
    error number -128
end try

将其另存为脚本(并确保将其另存为脚本文件!)。

任何时候要运行它,请使用以下命令: osascript /path/to/script.scpt

或者制作一个别名来执行该操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.