获取客户端网卡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 相关文章推荐
flash javascript之间的通讯方法小结
Dec 20 Javascript
写出更好的JavaScript程序之undefined篇(中)
Nov 23 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
May 23 Javascript
javascript中函数作为参数调用的方法
Feb 09 Javascript
jquery实现简单实用的打分程序实例
Jul 23 Javascript
JavaScript实现网站访问次数统计代码
Aug 12 Javascript
在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法
Aug 05 Javascript
关于Javascript回调函数的一个妙用
Aug 29 Javascript
原生JS实现层叠轮播图
May 17 Javascript
npm qs模块使用详解
Feb 07 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
Mar 19 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
Oct 24 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设计模式 Builder(建造者模式)
2011/06/26 PHP
php使浏览器直接下载pdf文件的方法
2013/11/15 PHP
PHP判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
PHP之uniqid()函数用法
2014/11/03 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
php中preg_replace_callback函数简单用法示例
2016/07/21 PHP
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
2013/11/15 Javascript
动态加载js、css等文件跨iframe实现
2014/02/24 Javascript
当前流行的JavaScript代码风格指南
2014/09/10 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
vue.js 使用axios实现下载功能的示例
2018/03/05 Javascript
Vue+mui实现图片的本地缓存示例代码
2018/05/24 Javascript
解决angularjs WdatePicker ng-model的问题
2018/09/13 Javascript
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
Vue双向数据绑定(MVVM)的原理
2020/10/03 Javascript
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
基于javascript实现移动端轮播图效果
2020/12/21 Javascript
[01:11]steam端dota2实名认证操作流程视频
2021/03/11 DOTA
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
对numpy中轴与维度的理解
2018/04/18 Python
Linux系统(CentOS)下python2.7.10安装
2018/09/26 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
利用PyQt中的QThread类实现多线程
2020/02/18 Python
Python实现动态循环输出文字功能
2020/05/07 Python
HTML5 实战PHP之Web页面表单设计
2011/10/09 HTML / CSS
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
德国户外商店:eXXpozed
2020/07/25 全球购物
如何用Python输出一个Fibonacci数列
2016/08/28 面试题
2015年超市工作总结
2015/04/09 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
Java8中接口的新特性使用指南
2021/11/01 Java/Android
Redis实现短信验证码登录的示例代码
2022/06/14 Redis