在 VB .NET 中查找并启动 *** 连接

Posted

技术标签:

【中文标题】在 VB .NET 中查找并启动 *** 连接【英文标题】:Find and start a *** connection in VB .NET 【发布时间】:2010-09-25 20:53:46 【问题描述】:

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

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

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

非常感谢,

RB。

【问题讨论】:

我在下面的答案中添加了有关 Win32_NetworkAdapter 类的信息 - 希望这更符合您的要求 感谢 Paul - 现在正在调查。我有一个特定于 *** 的解决方案,其中涉及到“rasdial.exe”,但它不是......漂亮......无论如何我会在几分钟内发布它以获取信息! 【参考方案1】:

这个使用 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 地址等 - 如果没有进一步研究,不确定它是什么,但如果您需要知道,请告诉我。

【讨论】:

嗨,保罗。 “NetConnectionID”将显示我的 NIC 的名称(例如“本地连接”),但不会为我的 *** 显示此名称,即使它已连接。不过感谢您的帮助。【参考方案2】:

好的,这是我用来检测命名 *** 的 hacky 解决方案。如果由于某种原因(包括网络连接断开、*** 不存在等)无法连接到 ***,它会抛出错误。

要测试的具体错误代码包括:

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

远程访问错误 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.***Timeout) Then
    Throw New Exception( _
String.Format("Connecting to ""0"" *** failed after 1ms", s***, My.Settings.***Timeout))
End If

If p.ExitCode <> 0 Then
    Throw New Exception( _
String.Format("Failed connecting to ""0"" with exit code 1. Errors 2", s***, p.ExitCode, p.StandardOutput.ReadToEnd.Replace(vbCrLf, "")))
End If

【讨论】:

【参考方案3】:

好的 - 最后的努力:)

Win32_NetworkConnection 类怎么样 - 我很确定这将处理 *** 连接

【讨论】:

在我的机器上,这显示了我所有的映射驱动器,以及我打开的所有网络共享。它不显示 ***,即使它们已连接 :-( 感谢您的帮助 :-) 臭虫 - 你需要的信息必须在 WMI 的某个地方 - 只是通过文档找到正确的类的一个案例 :o( 很高兴你找到了解决方法【参考方案4】:
RasDialer dialer = new RasDialer();
ReadOnlyCollection<RasConnection> connections = dialer.GetActiveConnections();

foreach (RasConnection connection in connections)

    // Do what you want to with the connections.

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

该组件是 CodePlex 上 DotRas 项目的一部分。

http://www.codeplex.com/DotRas

【讨论】:

嗨,Jeff,这正是我想要的正是。稍后我将下载源代码,以了解您是如何编写如此神奇的魔法的!非常非常感谢:-)

以上是关于在 VB .NET 中查找并启动 *** 连接的主要内容,如果未能解决你的问题,请参考以下文章

使用VB.NET在MSSQL中根据一个字段值进行查找相同的字段的另一个别名值怎么写?

如何在 vb .net 中获取任何已连接打印机的型号

VB.net 的异步组件

如何在 VB.NET 中检查 TCP 服务器(套接字)与 TCP 客户端的连接状态

VB.NET怎样连接数据库

vb.net的数据库连接