利用WMI与ActiveX在客户端获取MAC地址和IP地址的JS实现

作者:异步漫步

时间:2026-10-27

浏览:449

本文介绍在B/S架构系统中,通过客户端JavaScript脚本结合Windows Management Instrumentation (WMI) 和 ActiveX 控件,直接获取客户端网卡的MAC地址、IP地址及主机名的方法。该方案无需服务器端处理,利用系统自带的ActiveX对象实现异步查询,具有较好的执行速度和可靠性,适用于需要客户端身份验证的场景。

文章目录

客户端网络信息获取方案概述

在构建B/S结构的系统时,经常需要获取客户端的详细信息,例如IP地址和MAC地址,以便结合身份验证机制。虽然获取服务器端的MAC地址相对简单,但获取客户端的MAC地址则较为复杂。传统方法包括调用Win32API或直接执行nbtstat命令,但这些方式存在诸多局限。相比之下,采用客户端脚本(如JavaScript)是一种更优的解决方案。这种方法的优势在于无需服务器端进行额外处理,由客户端自行获取相关信息并传递至服务器端,其执行速度和可靠性均优于在服务器端获取的方式。


具体实现的html和javascript如下:

完整HTML与JavaScript实现代码

具体实现的HTML和JavaScript代码如下:

 
<HTML>
<HEAD>
<TITLE>WMI Scripting HTML</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<SCRIPT language=JScript event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for=foo>
document.forms[0].txtMACAddr.value=unescape(MACAddr);
document.forms[0].txtIPAddr.value=unescape(IPAddr);
document.forms[0].txtDNSName.value=unescape(sDNSName);
//document.formbar.submit();
</SCRIPT>
<SCRIPT language=JScript event=OnObjectReady(objObject,objAsyncContext) for=foo>
if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true)
{ 
if(objObject.MACAddress != null && objObject.MACAddress != "undefined")
MACAddr = objObject.MACAddress;
if(objObject.IPEnabled && objObject.IPAddress(0) != null && objObject.IPAddress(0) != "undefined")
IPAddr = objObject.IPAddress(0);
if(objObject.DNSHostName != null && objObject.DNSHostName != "undefined")
sDNSName = objObject.DNSHostName;
} 
</SCRIPT>
<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
<BODY>
<OBJECT id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT>
<OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>
<SCRIPT language=JScript>
var service = locator.ConnectServer();
var MACAddr ;
var IPAddr ;
var DomainAddr;
var sDNSName;
service.Security_.ImpersonationLevel=3;
service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');
</SCRIPT>
<FORM id=formfoo name=formbar method=post>
<INPUT type="text" name=txtMACAddr>
<INPUT type="text" name=txtIPAddr>
<INPUT type="text" name=txtDNSName>
</FORM>
</BODY>
</HTML>

其实最关键的还是用到两个ActiveX:

核心ActiveX对象说明

实现过程中关键的两个ActiveX对象定义如下:

 
<OBJECT id=locator classid=76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT>
<OBJECT id=foo classid=75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>

值得注意的是,这两个ActiveX控件均为Windows系统自带,无需额外下载或进行注册操作。


随后,通过脚本与上述ActiveX对象进行交互,所使用的脚本语言可以是JavaScript或VBScript。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章