获取客户端网卡MAC地址和IP地址实现JS代码


Posted in Javascript onMarch 17, 2013

在做B/S结构的系统时,我们常常需要获取客户端的一些信息,如IP和MAC,以结合身份验证。要获取服务器端的MAC很容易,但是要获取客户端的MAC的地址确要花费一翻心思,通常的做法是调用Win32API或直接调用nbtstat命令,这样做有很多问题,而另一种方法就是直接用客户端脚本,我们这里用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
<OBJECT id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT> 
<OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>

不过这两个ActiveX都是系统自带,不用去下载或注册。
接下来的工作就是用脚本和ActiveX交互,脚本可以是js或Vbs都可以.
Javascript 相关文章推荐
中文输入法不触发onkeyup事件的解决办法
Jul 09 Javascript
JS实现生成会变大变小的圆环实例
Aug 05 Javascript
vue多级多选菜单组件开发
Sep 08 Javascript
js实现随机抽选效果、随机抽选红色球效果
Jan 13 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
May 17 Javascript
ES6中let 和 const 的新特性
Sep 03 Javascript
微信开发之微信jssdk录音功能开发示例
Oct 22 Javascript
前端js中的事件循环eventloop机制详解
May 15 Javascript
JavaScript读取本地文件常用方法流程解析
Oct 12 Javascript
JavaScript实现刮刮乐效果
Nov 01 Javascript
Vue用mixin合并重复代码的实现
Nov 27 Vue.js
js不常见操作运算符总结
Nov 20 Javascript
Javascript跨域请求的4种解决方式
Mar 17 #Javascript
两种方法实现文本框输入内容提示消失
Mar 17 #Javascript
js 自制滚动条的小例子
Mar 16 #Javascript
JavaScript创建一个欢迎cookie弹出窗实现代码
Mar 15 #Javascript
js加强的经典分页实例
Mar 15 #Javascript
Jquery刷新页面背景图片随机变换的实现方法
Mar 15 #Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
Mar 15 #Javascript
You might like
PHP 高手之路(二)
2006/10/09 PHP
PHP的error_reporting错误级别变量对照表
2014/07/08 PHP
php制作简单模版引擎
2016/04/07 PHP
PHP实现简单登录界面
2019/10/23 PHP
childNodes.length与children.length的区别
2009/05/14 Javascript
Firebug 字幕文件JSON地址获取代码
2009/10/28 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
js用类封装pop弹窗组件
2017/10/08 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序
2019/07/08 Javascript
layui点击弹框页面 表单请求的方法
2019/09/21 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
2015/05/20 Python
Python常用库推荐
2016/12/04 Python
Apache如何部署django项目
2017/05/21 Python
Python内置函数delattr的具体用法
2017/11/23 Python
使用python将请求的requests headers参数格式化方法
2019/01/02 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
2019/01/30 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
python 多线程死锁问题的解决方案
2020/08/25 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
孕妇装中的著名品牌:Isabella Oliver(伊莎贝拉·奥利弗)
2016/10/31 全球购物
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
荷兰演唱会和体育比赛订票网站:viagogo荷兰
2018/04/08 全球购物
西雅图电动自行车公司:Rad Power Bikes
2020/02/02 全球购物
StringBuilder和String的区别
2015/05/18 面试题
什么是方法的重载
2013/06/24 面试题
最新大学职业规划书范文
2013/12/30 职场文书
对标管理实施方案
2014/03/12 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
Python中Cookies导出某站用户数据的方法
2021/05/17 Python
【海涛教你打dota】体验一超神发条:咱是抢盾专业户
2022/04/01 DOTA