我有一个VPN连接。为了建立VPN连接,必须执行一个名为PPTP.bk的文件。运行此文件并输入凭据后,VPN连接将建立。
我正在尝试以编程方式连接和断开VPN连接。 问题在于Windows中没有创建任何VPN连接,因此我需要能够随时验证任何VPN连接,如果不存在则建立一个。
我有一个VPN连接。为了建立VPN连接,必须执行一个名为PPTP.bk的文件。运行此文件并输入凭据后,VPN连接将建立。
我正在尝试以编程方式连接和断开VPN连接。 问题在于Windows中没有创建任何VPN连接,因此我需要能够随时验证任何VPN连接,如果不存在则建立一个。
我使用 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!");
}
}
}
}
稍作修改 - 这是适用于我的代码。
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;
}
我的网络驱动程序说明文本中有Cisco。这里是一个更加实时的版本,仅仅只有几行:
public static class VPNCheck
{
public static bool IsOn()
{
return ((NetworkInterface.GetIsNetworkAvailable())
&& NetworkInterface.GetAllNetworkInterfaces()
.FirstOrDefault(ni => ni.Description.Contains("Cisco"))?.OperationalStatus == OperationalStatus.Up);
}
}
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;
}
}
}
}
System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable
是完整的模块路径。 - Mick