在C#中获取Windows VPN接口

时间:2014-09-01 17:07:23

标签: c# networking adapter vpn

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

NetworkInterface.GetAllnetworkInterfaces() 

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

是否有与NetworkInterface.GetAllnetworkInterfaces()类似的东西获得VPN-Connections?

1 个答案:

答案 0 :(得分:3)

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

" 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:您可以阅读此文件的所有内容,并使用此类\[(.*?)\]

等RegeX过滤连接名称

正则表达式示例:

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

我希望,我可以帮助你。