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 相关文章推荐
安装APACHE
Jan 15 PHP
PHP 字符串长度判断效率更高的方法
Mar 02 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
Jul 15 PHP
Yii 快速,安全,专业的PHP框架
Sep 03 PHP
PHP实现支持SSL连接的SMTP邮件发送类
Mar 05 PHP
PHP文件缓存类实现代码
Oct 26 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
实例讲解php将字符串输出到HTML
Jan 27 PHP
在laravel中实现ORM模型使用第二个数据库设置
Oct 24 PHP
TP5框架页面跳转样式操作示例
Apr 05 PHP
laravel添加角色和模糊搜索功能的实现代码
Jun 22 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
WINDOWS 2000下使用ISAPI方式安装PHP
2006/09/05 PHP
PHP 文件上传全攻略
2010/04/28 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
2019/05/08 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
Javascript读取cookie函数代码
2010/10/16 Javascript
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
推荐25个超炫的jQuery网格插件
2014/11/28 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
React Native基础入门之初步使用Flexbox布局
2018/07/02 Javascript
vue中npm包全局安装和局部安装过程
2019/09/03 Javascript
vue实现多级菜单效果
2019/10/19 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
vue-admin-template配置快捷导航的代码(标签导航栏)
2020/09/04 Javascript
[01:12]DOTA2次级职业联赛 - Newbee.Y 战队宣传片
2014/12/01 DOTA
[25:45]2018DOTA2亚洲邀请赛4.5SOLO赛 Sylar vs Paparazi
2018/04/06 DOTA
python tornado修改log输出方式
2019/11/18 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
详解CSS3 弹性布局快速入门
2019/06/06 HTML / CSS
THE OUTNET英国官网:国际设计师品牌折扣网站
2016/08/14 全球购物
皇马官方商城:Real Madrid Store
2016/09/02 全球购物
函授药学自我鉴定
2014/02/07 职场文书
超市仓管员岗位职责范本
2014/09/18 职场文书
副校长个人对照检查材料思想汇报
2014/10/04 职场文书
街道党工委党的群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
科学发展观标语
2014/10/08 职场文书
事业单位个人查摆问题及整改措施
2014/10/28 职场文书
2014年体育部工作总结
2014/11/13 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
导游词之天津盘山
2019/11/01 职场文书
用 Python 元类的特性实现 ORM 框架
2021/05/19 Python
Redis的字符串是如何实现的
2021/10/24 Redis
Java Redisson多策略注解限流
2022/09/23 Java/Android