Javascript如何获取访问者IP地址?

解决方案 »

  1.   

    转贴一个:在做B/S结构的系统时,我们常常需要获取客户端的一些信息,如IP和MAC,以结合身份验证。在ASP.NET中,要获取服务器端的MAC很容易,但是要获取客户端的MAC的地址确要花费一翻心思,通常的做法是调用Win32API或直接调用nbtstat命令,这样做有很多问题,而另一种方法就是直接用客户端脚本,我们这里用JavaScript,这样做的好处是不需要服务器端进行处理,有客户端自行获取,传递到服务器端,且速度和可靠性都比在服务器端获取好。
      具体实现的html和JavaScript如下:  关键是用到两个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。
    <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>
      

  2.   

    <html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>JavaScript获取客户端IP</title>
    </head><body>
    <script type="text/javascript" language="javascript">
    <!--
    function GetLocalIPAddress()
    {
        var obj = null;
        var rslt = "";
        try
        {
            obj = new ActiveXObject("rcbdyctl.Setting");
            rslt = obj.GetIPAddress;
            obj = null;
        }
        catch(e)
        {
            //异常发生
        }
        
        return rslt;
    }document.write("你的IP是:" + GetLocalIPAddress());
    //-->
    </script>
    </body></html>
      

  3.   

    我把cftea的代码保存成html,放在服务器上。
    可访问这个文件的时候IP 没显示出来.
    有谁知道怎么回事啊。
    直接运行这个文件倒是能显示IP。
      

  4.   

    解决了,似乎是IE 设置的问题,把所有ActiveX控件有关的选项改称“启用”就可以了。
      

  5.   

    本来就是为了秘密获取客户端的地址,结果还要客户自己设置浏览器Active控件的允许,这样有什么秘密可言?
      

  6.   

    为何不在服务器端获取客户端的IP地址呀,还要客户端使用Activex控件?
      

  7.   

    为什么吧这段代码改成Jsp之后会抛异常?
      

  8.   

    在服务器端获取,然后传给javascript
    因为服务器端代码要比客户端代码选执行
      

  9.   

    jsp或servlet的request对象有个方法倒是可以获得客户端ip,Activex没用过,貌似是只有ie能用吧?