JS 获取 IP、MAC 和主机名的几种方法
本文介绍基于 Windows 平台 ActiveX 控件与 WMI(Windows Management Instrumentation)获取客户端网络信息的传统方法。
方法一:获取 IP 地址
该方法通过调用 WMI 查询 Win32_NetworkAdapterConfiguration 类,解析返回对象的 IPAddress 属性。
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
service.Security_.ImpersonationLevel = 3;
service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');
// 注:实际需在异步回调中遍历结果集,提取 obj.IPAddress 数组
方法二:获取 MAC 地址和主机名
查询逻辑与方法一相同,核心区别在于解析返回对象的 MACAddress 与 DNSHostName 属性。
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
service.Security_.ImpersonationLevel = 3;
service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');
// 注:实际需在异步回调中提取 obj.MACAddress 与 obj.DNSHostName
方法三:获取局域网 IP、本机 MAC 和机器名
该方法在一次 WMI 查询中综合提取局域网 IP、MAC 地址及计算机名称,适用于需要同时获取多项网络标识的场景。
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
service.Security_.ImpersonationLevel = 3;
service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');
// 注:实际需在异步回调中同时读取 IPAddress、MACAddress 和 DNSHostName
注意事项
- ActiveX 控件限制:上述代码依赖 ActiveX 控件,仅支持 Internet Explorer 等旧版浏览器,现代浏览器已默认禁用或移除该特性。
- 安全性:WMI 与 ActiveX 允许脚本直接访问底层操作系统信息,存在较高的安全风险。运行前通常需手动调整浏览器安全设置或将站点添加至信任区域。
- 平台兼容性:仅适用于 Windows 操作系统,且强依赖客户端环境配置,无法跨平台运行。
现代替代方案
在现代 Web 开发中,出于安全规范与跨平台兼容性考虑,已不再推荐在客户端直接调用底层 API 获取网络信息。建议采用前后端分离的架构:
- 客户端:使用纯 JavaScript(Fetch API 或 XMLHttpRequest)发起 HTTP 请求。
- 服务端:通过 Node.js、Python (Flask/FastAPI)、Java 等后端语言接收请求。
- 信息获取:服务端通过系统命令或语言内置模块(如 Node.js 的
os.networkInterfaces())获取网络信息,并将结果返回给前端。
该方案彻底规避了 ActiveX 的安全警告与兼容性瓶颈,符合当前主流浏览器的安全策略,适用于生产环境部署。

