簡體   English   中英

如何唯一地識別不是* VPN連接的網絡連接?

[英]How do I uniquely identify only network connections that are *not* VPN connections?

我試圖在運行時跟蹤所有當前的網絡連接,但我想排除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是不夠的。 我需要能夠跟蹤非VPN接口所連接的網絡的詳細信息。

例如:

我們稱我的工作網絡為“officenetwork”。 我們稱我的家庭網絡為“家庭網絡”。

如果我在工作,我可以通過檢查基於NLM_ENUM_NETWORK_CONNECTED狀態的NetworkListManagerClass來看到我已連接到officenetwork 我的應用程序應該知道officenetwork是我當前的本地網絡,並將存儲和引用特定於該網絡的設置。

同樣,如果我在家,我應該能夠看到家庭網絡 ,並存儲和引用一組不同的特定於該網絡的設置。

但是,如果我在家,並且使用VPN連接到officenetwork ,則根據NLM_ENUM_NETWORK_CONNECTED狀態檢查NetworkListManagerClass將顯示homenetworkofficenetwork 由於與officenetwork的連接是VPN,我需要忽略它,並且只存儲和引用homenetwork的設置。

該軟件適用於將連接到我一無所知的網絡的用戶,因此我無法假設特定VPN或網絡的連接數據。

如何檢查當前網絡連接並僅識別不是 VPN連接的網絡,以便我可以存儲該網絡的自定義設置?

INetwork實例中,您可以使用GetNetworkConnections方法獲取連接列表( INetworkConnections實例)。

然后,使用INetworkConnection :: GetAdapterId方法 ,您可以獲得表示適配器ID的Guid。 實際上,適配器Id與NetworkInterface.Id屬性匹配(它是一個字符串,但您可以將其轉換為Guid)。

這是一個示例控制台應用程序,它轉儲所有網絡及其連接和接口屬性(類型,名稱等):

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);
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM