php/js获取客户端mac地址的实现代码


Posted in PHP onJuly 08, 2013

废话不多讲,直接上代码吧!

<?php   
class MacAddr 
{   
    public $returnArray = array();    
    public $macAddr;       function __contruct($os_type=null){ 
        if(is_null($os_type)) $os_type = PHP_OS;   
        switch (strtolower($os_type)){   
        case "linux":   
            $this->forLinux();   
            break;   
        case "solaris":   
            break;   
        case "unix":   
            break;   
        case "aix":   
            break;   
        default:   
            $this->forWindows();   
            break;   
        }   
        $temp_array = array();   
        foreach($this->returnArray as $value ){   
            if(preg_match("/[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f]/i", $value, $temp_array)){   
                $this->macAddr = $temp_array[0];   
                break;   
            }   
        }   
        unset($temp_array);   
        return $this->macAddr;   
    } 
    function forWindows(){   
        @exec("ipconfig /all", $this->returnArray);   
        if($this->returnArray)   
            return $this->returnArray;   
        else{   
            $ipconfig = $_SERVER["WINDIR"]."system32ipconfig.exe";   
            if (is_file($ipconfig))   
                @exec($ipconfig." /all", $this->returnArray);   
            else  
                @exec($_SERVER["WINDIR"]."systemipconfig.exe /all", $this->returnArray);   
            return $this->returnArray;   
        }   
    } 
    function forLinux(){   
        @exec("ifconfig -a", $this->returnArray);   
        return $this->returnArray;   
    }   
}   
$mac = new MacAddr(PHP_OS);   
echo $mac->macAddr;   
echo "<br />"; 
// 获取客户端 
// linux 
$command = "arp -a {$_SERVER['REMOTE_ADDR']}"; 
echo $command; 
echo "<br />"; 
$result=`{$command}`;  
// windows 
$command = "nbtstat -a {$_SERVER['REMOTE_ADDR']}"; 
echo $command; 
echo "<br />"; 
$result=`{$command}`;  
print_r($result);   
?>

获取服务端的逻辑没什么大问题,可能会存在权限问题。
获取客户端的时候,可能会比较慢,arp/nbstat命令执行会比较慢。

<script language="JScript" event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for="foo">    
document.forms[0].lbMacAddr.value=unescape(MACAddr);    
</script>   
<script language="JScript" event="OnObjectReady(objObject,objAsyncContext)" for="foo">    
if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true && objObject.MACAddress != null && objObject.MACAddress != "undefined") MACAddr = objObject.MACAddress;    
</script>   
<object id="locator" classid="CLSID:76A64158-CB41-11D1-8B02-00600806D9B6"></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><input type="text" id='lbMacAddr' name='lbMacAddr' /></form>

只适用于IE浏览器,而且会有告警提示,挺遗憾的。

PHP 相关文章推荐
如何正确理解PHP的错误信息
Oct 09 PHP
PHP 和 MySQL 开发的 8 个技巧
Oct 09 PHP
多重?l件?合查?(一)
Oct 09 PHP
通过html表格发电子邮件
Oct 09 PHP
逐步提升php框架的性能
Jan 10 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
Jan 14 PHP
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
Apr 24 PHP
php实现按照权重随机排序数据的方法
Jan 09 PHP
深入解析PHP的Yii框架中的event事件机制
Mar 17 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
Aug 31 PHP
PHP常用字符串函数小结(推荐)
Aug 05 PHP
基于PHP实现用户在线状态检测
Nov 10 PHP
关于PHP语言构造器介绍
Jul 08 #PHP
php5.5新数组函数array_column使用
Jul 08 #PHP
PHP 关于访问控制的和运算符优先级介绍
Jul 08 #PHP
解析将多维数组转换为支持curl提交的一维数组格式
Jul 08 #PHP
php采集文章中的图片获取替换到本地(实现代码)
Jul 08 #PHP
php打开文件fopen函数的使用说明
Jul 05 #PHP
解析PHP中$_FILES的使用以及注意事项
Jul 05 #PHP
You might like
基于MySQL到MongoDB简易对照表的详解
2013/06/03 PHP
四种php中webservice实现的简单架构方法及实例
2015/02/03 PHP
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
javascript重写alert方法的实例代码
2013/03/29 Javascript
JavaScript作用域链使用介绍
2013/08/29 Javascript
jQuery.fn和jQuery.prototype区别介绍
2013/10/05 Javascript
使用JSLint提高JS代码质量方法分享
2013/12/16 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
2014/07/06 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
node.js中EJS 模板快速入门教程
2017/05/08 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
浅谈关于iview表单验证的问题
2018/09/29 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
使用JS实现鼠标放上图片进行放大离开实现缩小功能
2021/01/27 Javascript
python Django连接MySQL数据库做增删改查
2013/11/07 Python
python下10个简单实例代码
2017/11/15 Python
基于Django用户认证系统详解
2018/02/21 Python
Python实现找出数组中第2大数字的方法示例
2018/03/26 Python
python实现合并两个排序的链表
2019/03/03 Python
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
JSF界面控制层技术
2013/06/17 面试题
会计专业自荐信范文
2013/12/02 职场文书
幼儿园六一活动总结
2014/08/27 职场文书
小型婚礼主持词
2015/06/30 职场文书
二婚主持词
2015/06/30 职场文书
总经理年会致辞
2015/07/29 职场文书
小学同学聚会感言
2015/07/30 职场文书
慰问信(范文3篇)
2019/10/23 职场文书
MySQL数字类型自增的坑
2021/05/07 MySQL
python实现过滤敏感词
2021/05/08 Python
nginx部署多前端项目的几种方法
2021/05/25 Servers
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server
解决Mysql报错 Table 'mysql.user' doesn't exist
2022/05/06 MySQL