gpt4 book ai didi

c# - 我如何唯一地识别*不是* VPN 连接的网络连接?

转载 作者:行者123 更新时间:2023-11-30 16:47:42 35 4
gpt4 key购买 nike

我试图在运行时跟踪所有当前网络连接,但我想排除 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)
{

}
}

但是,仅知道接口(interface)是或不是 VPN 对我来说还不够。我需要能够跟踪有关非 VPN 接口(interface)连接到的网络的详细信息。

例如:

我们将我的工作网络称为“officenetwork”。我们将我的家庭网络称为“homenetwork”。

如果我在工作,我可以通过根据 NLM_ENUM_NETWORK_CONNECTED 状态检查 NetworkListManagerClass 来看到我已连接到 officenetwork。我的应用程序应该知道 officenetwork 是我当前的本地网络,并将存储和引用特定于该网络的设置。

同样,如果我在家,我应该能够看到家庭网络,并存储和引用一组特定于该网络的不同设置。

但是,如果我在家,并且我使用 VPN 连接到 officenetwork,根据 NLM_ENUM_NETWORK_CONNECTED 状态检查 NetworkListManagerClass将同时显示homenetworkofficenetwork。由于与 officenetwork 的连接是 VPN,因此我需要忽略它,只存储和引用 homenetwork 的设置。

此软件适用于将连接到我一无所知的网络的用户,因此我不能假设特定 VPN 或网络的连接数据。

如何检查当前网络连接并仅识别不是 VPN 连接的网络,以便我可以存储该网络的自定义设置?

最佳答案

来自INetwork例如,您可以使用 INetworkConnections 获取连接列表(GetNetworkConnections 实例)方法。

然后,使用 INetworkConnection::GetAdapterId method ,您可以获得表示适配器 ID 的 Guid。适配器 ID 实际上匹配 NetworkInterface.Id Property (这是一个字符串,但您可以将其转换为 Guid)。

这是一个示例控制台应用程序,它转储所有网络及其连接和接口(interface)属性(类型、名称等):

class Program
{
static void Main(string[] args)
{
var mgr = new NetworkListManager();
foreach (INetwork network in mgr.GetNetworks(NLM_ENUM_NETWORK.NLM_ENUM_NETWORK_ALL))
{
Console.WriteLine("Network: " + network.GetName());
foreach (INetworkConnection conn in network.GetNetworkConnections())
{
Console.WriteLine(" Adapter Id: " + conn.GetAdapterId());
var ni = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault(i => new Guid(i.Id) == conn.GetAdapterId());
Console.WriteLine(" Interface: " + ni.Name);
Console.WriteLine(" Type: " + ni.NetworkInterfaceType);
}
}
}
}

关于c# - 我如何唯一地识别*不是* VPN 连接的网络连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39152742/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com