我有一个VPN连接,为了建立VPN连接,必须执行一个PPTP.bk文件,运行此文件并输入凭据后,建立VPN连接。 我试图以编程方式连接和断开VPN连接。 问题是窗口中没有创建VPN连接,因此我需要能够随时验证任何VPN连接,如果不存在则建立一个。
答案 0 :(得分:17)
我使用NetworkInterface
类检查VPN连接状态。以下是我为此目标编写的代码:
if (NetworkInterface.GetIsNetworkAvailable())
{
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface Interface in interfaces)
{
if (Interface.OperationalStatus == OperationalStatus.Up)
{
if ((Interface.NetworkInterfaceType == NetworkInterfaceType.Ppp) && (Interface.NetworkInterfaceType != NetworkInterfaceType.Loopback))
{
IPv4InterfaceStatistics statistics = Interface.GetIPv4Statistics();
MessageBox.Show(Interface.Name + " " + Interface.NetworkInterfaceType.ToString() + " " + Interface.Description);
}
else
{
MessageBox.Show("VPN Connection is lost!");
}
}
}
}
答案 1 :(得分:3)
查看此代码以维护VPN connection programmatically。
在 TestConnection 功能(每15秒调用一次)中,ping请求被发送到IP地址以检查连接是否存活。
答案 2 :(得分:2)
稍作修改 - 这是适合我的代码。
public bool CheckForVPNInterface()
{
if (NetworkInterface.GetIsNetworkAvailable())
{
NetworkInterface[] interfaces =
NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface Interface in interfaces)
{
// This is the OpenVPN driver for windows.
if (Interface.Description.Contains("TAP-Windows Adapter")
&& Interface.OperationalStatus == OperationalStatus.Up)
{
return true;
}
}
}
return false;
}
答案 3 :(得分:0)
在我的网络驱动程序上,描述文本中有Cisco
。这是仅几行的最新版本:
public static class VPNCheck
{
public static bool IsOn()
{
return ((NetworkInterface.GetIsNetworkAvailable())
&& NetworkInterface.GetAllNetworkInterfaces()
.FirstOrDefault(ni => ni.Description.Contains("Cisco"))?.OperationalStatus == OperationalStatus.Up);
}
}
答案 4 :(得分:0)
对我来说,这很有用,但是我想在遍历所有接口并找到一个UP后检查特定的VPN名称...
if (NetworkInterface.GetIsNetworkAvailable())
{
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface Interface in interfaces)
{
if (Interface.OperationalStatus == OperationalStatus.Up)
{
if (Interface.Description.Contains("VPN_Name"))
{
connected = true;
break;
}
}
}
}
答案 5 :(得分:-1)
如果存在VPN连接且连接正常,您将始终找到一个名为“ tun0 ”的网络接口。因此,使用NetworkInterface的相同方法,我编写了一个简单的代码:
public static boolean isVpnOk(){
List<String> networks = new ArrayList<>();
try {
for (NetworkInterface networkInterface : Collections.list(NetworkInterface.getNetworkInterfaces())) {
if (networkInterface.isUp()) networks.add(networkInterface.getName());
}
} catch (Exception e) {
e.printStackTrace();
}
return networks.contains("tun0");
}