在开始 VPN 连接之前检查网关是否可访问

Check if the gateway is accessible before starting VPN connection

我正在开发 powershell 拨号程序,以便在执行一些步骤后调用 VPN 工具。

用户的第一步是选择用于建立连接的设备。在此步骤中,我正在搜索如何测试 VPN 网关,因为如果此测试不起作用,则意味着用户可能遇到连接问题,例如强制门户(如果他尝试从酒店连接)。所以如果这个测试失败了,就没有必要再进一步了。

我试过这个:

$ip ="x.x.x.x"
if(Test-Connection -computername $ip -count 1 -quiet){
write-host "gateway is accessible"
}

问题是:连接正常,VPN 也正常(如果我尝试连接),但我没有从该脚本得到任何响应。也许这不是正确的测试方法。

配置:Win 7 / Powershell 4

您将需要某种强制门户测试网络服务。就像你说的,Test-Connection不能处理captive portal之类的东西,它只是看网络接口状态。

通常,您有一个具有预期输出的固定 URL。例如,您使用 URL mytestconnection/test 设置了一个 Web 服务器,它输出 OK

然后你在那个 URL 上执行 Invoke-WebRequest,如果它没有说 OK,那就意味着有问题。

我找到了 this post

的解决方案

通过使用这个:

if(New-Object System.Net.Sockets.TCPClient -ArgumentList '$iSERVER','$PORT') {...}

它运作良好。