当前位置:首页 > 软件开发 > dev
firefox

利用JS获取IE客户端IP及MAC的实现

在做b/s结构的系统时,我们常常需要获取客户端的一些信息,如ip和mac,以结合身份验证。在asp.net中,要获取服务器端的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 action=nicpost.asp method=post><input value=00:05:5d:0e:c7:fa name=txtmacaddr> <input value=192.168.0.2 name=txtipaddr> <input value=typ 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我个人喜欢用js。

 ↓相关文章:
© 2006-2008 All Rights Reserved