我希望在运行时跟踪所有当前的网络连接,但我想排除VPN连接。
同时我需要确定正在连接的网络,因此我正在使用NetworkListManagerClass()
来构建当前连接列表:
var manager = new NetworkListManagerClass();
var connectedNetworks = manager.GetNetworks(NLM_ENUM_NETWORK.NLM_ENUM_NETWORK_CONNECTED).Cast<INetwork>();
我相信通过检查NetworkInterface
类的NetworkInterfaceType
,我可以确定连接适配器是否是VPN:
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces().Where(n => n.OperationalStatus == OperationalStatus.Up).ToArray();
foreach (NetworkInterface n in interfaces)
{
if (n.NetworkInterfaceType == NetworkInterfaceType.Tunnel || n.NetworkInterfaceType == NetworkInterfaceType.PPP)
{
}
}
然而,仅知道接口是否为VPN还不足够。我需要能够跟踪非VPN接口所连接的网络的详细信息。
例如:
我们将我的工作网络称为“officenetwork”。我们将我的家庭网络称为“homenetwork”。
如果我在工作中,可以通过检查基于NLM_ENUM_NETWORK_CONNECTED状态的NetworkListManagerClass来看到我连接到了officenetwork。我的应用程序应该知道officenetwork是我的当前本地网络,并存储和引用特定于该网络的设置。
同样,如果我在家里,我应该能够看到homenetwork,并存储和引用特定于该网络的不同设置。
但是,如果我在家里,并使用VPN连接到officenetwork,那么基于NLM_ENUM_NETWORK_CONNECTED状态检查NetworkListManagerClass将显示homenetwork和officenetwork两个网络。由于与officenetwork的连接是VPN,我需要忽略它,并仅存储和引用homenetwork的设置。
这个软件将面向我一无所知的用户,因此我不能假设特定VPN或网络的连接数据。
我如何检查当前网络连接并仅识别非VPN连接的网络,以便我可以为该网络存储自定义设置?
GetAdapterId()
方法,我将非常高兴授予悬赏! - Beofett