我用的是PHP,怎么获取客户端网卡MAC地址,获得之后是要用于判断权限的,不管用什么方法,请大家给点建议~

解决方案 »

  1.   

    客户端的mac地址,php是不能直接获取到的,只能用服务器一些操作间接获取。以前听其他人说起过。
      

  2.   


    PHP是无法直接操作客户端的,除非你有activex控件,并且用户已经安装好了,这样就可以通过javascript来完成,还有一个好办法就是使用flash,一般来说,客户端都安装了这个插件
      

  3.   

    javascript获取客户端网卡MAC地址和IP地址和计算机名
    来源:http://www.blogjava.net/ctguzhupan/archive/2006/08/08/62436.html<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="index.do" method="post"><INPUT value="00-11-11-B4-52-EF"   name="txtMACAddr"> <INPUT value="210.42.38.50"  name="txtIPAddr"> <INPUT value="zhupan" name="txtDNSName"> </FORM></BODY></HTML> 
      

  4.   

    如果权限允许,执行ipconfig(windows系统)或者ifconfig(linux系统)命令,从结果中提取。
      

  5.   

    Sorry,没仔细看,原来是客户端的。
    这个只能通过浏览器插件来实现了,服务器端的除非自己修改过的Http服务器,要不是不可能的。
      

  6.   

    最简单还是执行系统自带的程序命令,当然,这个有依赖性.我就撞到过因为win的环境变量出问题,运行ipconfig时找不到程序的.理想点的处理办法还是得到%windir%环境变量,用相对路径去执行ipconfig.exe.而且,执行程序是调用php的封装函数,是服务器端控制的,当然,要是客户端的ipconfig.exe没了,那就自认倒霉了.
    Linux下没试过,不乱发言.不过我想思路应该差不多.
    实在不行让客户手动填...-_-
    恩...==突然想到个问题,现在很多路由器都采用web管理,而这些web程序都可以得到客户端的mac,这个又是怎么实现的呢?
      

  7.   

    感谢各位的回复,我目前是这样的用JS获取到的(注意是获取客户端的不是服务器的),这样做有个小问题但也能接受,只能用于IE,设置一下IE浏览器:工具-》internet选项->安全->自定义级别-》(对未标记为可安全执行脚本的activex控件初始化并执行脚本)选择“提示”,即可,每打开登陆的时候会弹出一个对话框:在此页上的activex 控件和本页上的其它部分的交互可能不安全。你想允许这种交互吗?点“是”即可,因为是公司内部的系统用的人不多,只是用于限制不能在员工家里打开而已~ 目前我也只能做到这样了,暂时还没有想到更好的办法~<SCRIPT language=JScript event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for=foo> 
    document.forms[0].txtMACAddr.value=unescape(MACAddr); 
    //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> <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>