在 Windows 上获取活动网络接口

在 Windows 上获取活动网络接口

我正在开发一个应用程序,为数据包嗅探器 windump 提供 UI。Windump 有一个“-D”参数,它列出了它能找到的所有网络接口,然后您可以指定要监听的接口。

但是,我想避免强迫用户手动配置要监听的接口。在 Unix 上,我可以通过调用ifconfig并解析输出来获取正确的网络接口(en0、en1 等),但我找不到任何可以产生类似信息的等效 Windows API 或命令——ipconfig似乎无法获取此数据。

有人能建议一个 Windows 命令行工具或可以通过 VBScript 调用的 API 来获取这些数据吗,这样我就不必在我的 GUI 中向用户显示一个对话框来告诉他们选择正确的界面?

答案1

此命令将提供接口列表,包括已连接或已断开连接的状态:

c:\>netsh interface show interface

Admin State    State          Type             Interface Name
-------------------------------------------------------------------------
Enabled        Connected      Dedicated        Local Area Connection

答案2

您可以使用检查有关连接的更多信息。还有一些其他实用程序也ipconfig /all可用于其他目的。netshnetstat

在此处输入图片描述

如果您从编码角度来看,那么您必须寻找一些 Windows API 代码,从中您可以创建自己的 api,这将有助于您获取有关 Windows 操作系统的信息。您可以使用 Windows api 或 .net 中创建的某些 api。 这里有更多关于这些的信息;如果您能够为此编程......

这里是一些代码片段,用于获取有关网络的所有信息。检查这些链接。也许它们可以包含在 vbscript 中。 链接1 链接2 链接3 链接4

希望这对你有帮助...

答案3

这似乎解决了问题:

http://shadowbq.blogspot.com/2006/06/windump-finding-pcap-device-mapping.html

它是一个 VBS 脚本,用于查询活动网络接口并将其转换为适合作为参数传递给 windup.exe 的格式。

答案4

您不需要创建新的 API。使用 VBScript 中的 WMI 类。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa394216(v=vs.85).aspx

到目前为止,最好的方法不是先枚举 NIC。而是解析路由表。这是计算机用来决定将数据包路由到 Internet 的位置的相同机制,我认为这是你的主要目标。

一个例子

Set Host = "."  
Set WMI = GetObject("winmgmts:\\" & Host & "\root\CIMV2")
Set intIndex = WMI.ExecQuery("SELECT InterfaceIndex FROM Win32_IP4RouteTable WHERE Destination='0.0.0.0'")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE InterfaceIndex= " & intIndex) 

这将返回路由表顶部的所有适配器。

相关内容