![在 Windows 上获取活动网络接口](https://linux22.com/image/1295934/%E5%9C%A8%20Windows%20%E4%B8%8A%E8%8E%B7%E5%8F%96%E6%B4%BB%E5%8A%A8%E7%BD%91%E7%BB%9C%E6%8E%A5%E5%8F%A3.png)
我正在开发一个应用程序,为数据包嗅探器 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
答案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)
这将返回路由表顶部的所有适配器。