代码之家  ›  专栏  ›  技术社区  ›  RB.

在vb.net中查找并启动VPN连接

  •  2
  • RB.  · 技术社区  · 17 年前

    我正在使用 NetworkInterface.GetAllNetworkInterfaces() 获取PC上的所有接口。但是,这似乎只返回“活动”接口。如何在.NET中查找“非活动”网络接口,如未连接的VPN、禁用的NIC等。

    我想在“控制面板”->“网络连接”中找到他们的名字。因此,例如,如果我有一个名为“我的工作”的VPN,我希望能够使用名称“我的工作”找到它。

    使用win32网络适配器配置似乎不是一个选项,因为它不会返回“网络连接”中显示的名称(据我所见)。

    多谢,

    RB。

    4 回复  |  直到 8 年前
        1
  •  1
  •   Jeff Winn    17 年前
    RasDialer dialer = new RasDialer();
    ReadOnlyCollection<RasConnection> connections = dialer.GetActiveConnections();
    
    foreach (RasConnection connection in connections)
    {
        // Do what you want to with the connections.
    }
    

    它将检索Windows正在使用的所有已连接拨号条目(包括VPN连接)及其相关句柄和其他信息。

    该组件是codeplex上dotras项目的一部分。

    http://www.codeplex.com/DotRas

        2
  •  1
  •   Paul Nearney    17 年前

    使用wmi的这个例子可能会给您带来很多好处(顺便说一下,对于c很抱歉!):

    using System.Management;
    
    string query = "SELECT * FROM Win32_NetworkAdapterConfiguration";
    ManagementObjectSearcher moSearch = new ManagementObjectSearcher(query);
    ManagementObjectCollection moCollection = moSearch.Get();
    
    // Every record in this collection is a network interface
    foreach (ManagementObject mo in moCollection)
    {
        // Do what you need to here....
    }
    

    对于测试适配器是否已启用,此链接应该有助于:

    Win32_NetworkAdapterConfiguration class

    编辑:你可能会有更多的运气 Win32_NetworkAdapter 类-它具有标题和说明属性,其中 可以 给你所需要的。有一种方法可以将这些信息与我提到的前一个类联系起来,以获取IP地址等-不需要进一步研究就不确定它是什么,但是如果您需要知道,请告诉我。

        3
  •  1
  •   RB.    13 年前

    好的,这是一个黑客解决方案,我要检测一个命名的vpn。如果由于任何原因(包括网络连接断开、VPN不存在等)而无法连接到VPN,则会引发错误。

    要测试的特定错误代码包括:

    远程访问错误800-无法建立VPN连接。
    VPN服务器可能无法访问,或者安全参数可能无法访问 为此连接正确配置。

    远程访问错误623-系统找不到电话簿 此连接的条目。

    它并不能真正地回答我提出的问题(尽管它对于现实生活中的问题很有效)。

    Dim p As New Process
    
    p.StartInfo.UseShellExecute = False
    p.StartInfo.RedirectStandardOutput = True
    p.StartInfo.RedirectStandardError = True
    p.StartInfo.FileName = "rasdial.exe"
    p.StartInfo.Arguments = """Company HQ"""
    p.Start()
    If Not p.WaitForExit(My.Settings.VpnTimeout) Then
        Throw New Exception( _
    String.Format("Connecting to ""{0}"" VPN failed after {1}ms", sVpn, My.Settings.VpnTimeout))
    End If
    
    If p.ExitCode <> 0 Then
        Throw New Exception( _
    String.Format("Failed connecting to ""{0}"" with exit code {1}. Errors {2}", sVpn, p.ExitCode, p.StandardOutput.ReadToEnd.Replace(vbCrLf, "")))
    End If
    
        4
  •  0
  •   Paul Nearney    17 年前

    好的-最后的努力:)

    那呢? Win32_NetworkConnection 类-我很确定这将处理VPN连接