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 危险函数解释 分析
Apr 22 PHP
php &amp;&amp; 逻辑与运算符使用说明
Mar 04 PHP
rrmdir php中递归删除目录及目录下的文件
May 15 PHP
php判断数组元素中是否存在某个字符串的方法
Jun 14 PHP
php遍历类中包含的所有元素的方法
May 12 PHP
使用xampp搭建运行php虚拟主机的详细步骤
Oct 21 PHP
PHP的Yii框架中View视图的使用进阶
Mar 29 PHP
php与python实现的线程池多线程爬虫功能示例
Oct 12 PHP
php使用 readfile() 函数设置文件大小大小的方法
Aug 11 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
PHP中“=&gt;
Mar 01 PHP
利用PHP如何统计Nginx日志的User Agent数据
Mar 06 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
PHP 身份验证方面的函数
2009/10/11 PHP
很让人受教的 提高php代码质量36计
2012/09/05 PHP
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
node.js中的fs.statSync方法使用说明
2014/12/16 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
js window对象属性和方法相关资料整理
2015/11/11 Javascript
jQuery on()绑定动态元素出现的问题小结
2016/02/19 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
jquery实现百叶窗效果
2017/01/12 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
JS中使用cavas截图网页并解决跨域及模糊问题
2018/11/13 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
彻底揭秘keep-alive原理(小结)
2019/05/05 Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
2020/08/21 Javascript
vue实现选中效果
2020/10/07 Javascript
[02:04]2020年夜魇暗潮预告片
2020/10/30 DOTA
python中强大的format函数实例详解
2018/12/05 Python
说说如何遍历Python列表的方法示例
2019/02/11 Python
Python和Anaconda和Pycharm安装教程图文详解
2020/02/04 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
python opencv实现直线检测并测出倾斜角度(附源码+注释)
2020/12/31 Python
HTML中使用SVG与SVG预定义形状元素介绍
2013/06/28 HTML / CSS
HTML5添加禁止缩放功能
2017/11/03 HTML / CSS
Huda Beauty官方商店:化妆和美容产品
2020/09/05 全球购物
三分钟演讲稿事例
2014/03/03 职场文书
教师评语大全
2014/04/28 职场文书
学校群众路线专项整治方案
2014/10/31 职场文书
2014年材料员工作总结
2014/11/19 职场文书
试用期自我评价范文
2015/03/10 职场文书
老兵退伍感言
2015/08/03 职场文书
高中诗歌鉴赏教学反思
2016/02/16 职场文书
详解Redis实现限流的三种方式
2021/04/27 Redis
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android