【问题标题】:Get Windows VPN Interfaces in C#在 C# 中获取 Windows VPN 接口
【发布时间】:2014-10-25 22:49:01
【问题描述】:

我尝试获取所有网络接口,我在窗口中看到所有网络适配器。 如果我使用

NetworkInterface.GetAllnetworkInterfaces() 

我只得到 LAN-Adapters 和 Loopback。但我没有得到我配置的 VPN 连接。 VPN 连接是我需要的东西,但我找不到获取它们的方法(即使它们已断开连接)。

是否有类似于NetworkInterface.GetAllnetworkInterfaces() 的东西可以获取 VPN 连接?

【问题讨论】:

  • 您确定 VPN 处于活动状态吗? - stackoverflow.com/questions/7473301/…
  • 嗨,我确定 VPN 处于非活动状态。我尝试让所有 VPN 连接在列表中显示它们。该列表显示所有连接 - 已连接或未连接。大多数时候它不会连接。我希望除了 WMI 之外还有别的东西。
  • 如果您不想使用 WMI,那么您可能应该在问题本身中写下它。
  • 嗨,我检查了 WMI 方法,但这也没有显示 VPN 连接。如果我添加一个新的,wmi 类中的实例数将保持不变。所以这个 WMI 类似乎不是正确的类,但我没有找到符合我要求的其他类。
  • 我自己几乎从未使用过WMI,所以我对这个问题没有真正的用处。您可以向MCVE 提出一个与 WMI 相关的新问题(只要确保没有明显的重复和明显的错误)。如果它在一段时间内没有引起足够的关注,那么我可以悬赏它,只需在此处使用@username notation@ 给我写评论

标签: c# networking adapter vpn


【解决方案1】:

在 Windows VPN 中,接口存储在拨号电话簿文件中。
通过 Windows 中的网络连接实用程序创建的所有 VPN 接口都将存储在默认的 .pbk 文件中,该文件存储在 (Windows 7/8):

“C:\Users\%username%\AppData\Roaming\Microsoft\Network\Connections\Pbk\rasphone.pbk”

此文件包含纯文本,可能如下所示:

 [VPN Connection]
 Encoding=1
 PBVersion=1
 Type=2
 AutoLogon=0

 <...omitted...>

 [VPN Connection 2]
 Encoding=1
 PBVersion=1
 Type=2
 AutoLogon=0

1:您可以读取此文件的所有内容并使用像 \[(.*?)\] 这样的 RegX 过滤连接名称

正则表达式示例:

using System.Text.RegularExpressions;

namespace ListVPNConnections
{
    class Program
    {
        static void Main()
        {
            // VPN adapters are stored in the rasphone.pdk
            // "C:\Users\Me\AppData\Roaming\Microsoft\Network\Connections\Pbk\rasphone.pbk"
            string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData) +
                          @"\Microsoft\Network\Connections\Pbk\rasphone.pbk";

            const string pattern = @"\[(.*?)\]";
            var matches = Regex.Matches(System.IO.File.ReadAllText(path), pattern);

            foreach (Match m in matches)
                System.Console.WriteLine(m.Groups[1]);
        }
    }
}

2:或使用DotRas之类的框架。

DotRas 示例:

using DotRas;

namespace ListVPNConnections
{
    class Program
    {
        static void Main()
        {
            // VPN adapters are stored in the rasphone.pdk
            // "C:\Users\Me\AppData\Roaming\Microsoft\Network\Connections\Pbk\rasphone.pbk"
            string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData) +
                          @"\Microsoft\Network\Connections\Pbk\rasphone.pbk";

            RasPhoneBook pbk = new RasPhoneBook();
            pbk.Open(path);

            foreach (RasEntry entry in pbk.Entries)
               System.Console.WriteLine((entry.Name));
        }
    }
}

希望能帮到你。

【讨论】:

  • 我刚刚发现当您使用 -AllUserConnection(所有用户都可以从登录屏幕使用 vpn)参数建立 VPN 连接时,它没有存储在这个 rasphone.pbk 中,因为它存储在全局电话簿中的 msdocs 找不到它。它仅显示在网络适配器中。那么有什么想法吗?
猜你喜欢
  • 2022-09-25
  • 2011-03-12
  • 1970-01-01
  • 2018-09-10
  • 2013-12-12
  • 2011-03-28
  • 1970-01-01
  • 2011-06-15
  • 2012-08-02
相关资源
最近更新 更多