【发布时间】:2017-01-02 07:49:52
【问题描述】:
我正在尝试在运行时跟踪所有当前网络连接,但我想排除 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”。我们将我的家庭网络称为“家庭网络”。
如果我在工作,我可以通过根据NLM_ENUM_NETWORK_CONNECTED 状态检查NetworkListManagerClass 来查看我已连接到officenetwork。我的应用程序应该知道 officenetwork 是我当前的本地网络,并将存储和引用特定于该网络的设置。
同样,如果我在家,我应该能够看到 homenetwork,并存储和引用特定于该网络的一组不同设置。
但是,如果我在家,并且使用 VPN 连接到 officenetwork,则根据 NLM_ENUM_NETWORK_CONNECTED 状态检查 NetworkListManagerClass 将同时显示 homenetwork 和 办公网络。由于与 officenetwork 的连接是 VPN,我需要忽略它,只存储和引用 homenetwork 的设置。
此软件适用于将连接到我一无所知的网络的用户,因此我无法假设特定 VPN 或网络的连接数据。
如何检查当前网络连接并仅识别非 VPN 连接的网络,以便存储该网络的自定义设置?
【问题讨论】:
-
抱歉标签不正确;我在 cmets 中表示我不确定它是否合适。如果有人可以就如何改进问题提出建议,我将不胜感激,因为我不明白投反对票的原因。
-
不用担心标签——我只是把它编辑掉了。对不起,谁投了反对票……不是我(不正确的标签不值得。)如果事实上,我认为这是一个写得很好的问题——请投赞成票! +1
-
network.GetNetworkConnections()...GetAdapterId() 是一个与 NetworkInterface.Id 匹配的 guid。这是您要查找的缺失链接吗?
-
@SimonMourier 是的!这似乎是我所缺少的。如果您可以将其发布为答案,展示如何访问
GetAdapterId()方法,我将非常乐意奖励赏金!