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 at(@)符号的用法简介
Jul 11 PHP
PHP中通过加号合并数组的一个简单方法分享
Jan 27 PHP
php中实现简单的ACL 完结篇
Sep 07 PHP
PHP中spl_autoload_register函数的用法总结
Nov 07 PHP
php中call_user_func函数使用注意事项
Nov 21 PHP
PHP中预定义的6种接口介绍
May 12 PHP
Laravel与CI框架中截取字符串函数
May 08 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
Sep 22 PHP
Yii输入正确验证码却验证失败的解决方法
Jun 06 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
如何通过PHP实现Des加密算法代码实例
May 09 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截取中文字符串函数实例
2015/02/23 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
javascript中&quot;/&quot;运算符常见错误
2010/10/13 Javascript
jquery中防刷IP流量软件影响统计的一点对策
2011/07/10 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
2013/03/12 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
使用jquery中height()方法获取各种高度大全
2014/04/02 Javascript
javascript格式化指定日期对象的方法
2015/04/21 Javascript
javascript实现获取浏览器版本、浏览器类型
2015/12/02 Javascript
理解javascript闭包
2015/12/15 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
2016/12/13 Javascript
JS实现焦点图轮播效果的方法详解
2016/12/19 Javascript
JS获得多个同name 的input输入框的值的实现方法
2017/01/09 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
2017/12/19 jQuery
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
ES6学习笔记之map、set与数组、对象的对比
2018/03/01 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
2019/07/10 Javascript
30秒轻松实现TensorFlow物体检测
2018/03/14 Python
python 在指定范围内随机生成不重复的n个数实例
2019/01/28 Python
django的ORM操作 增加和查询
2019/07/26 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
2019/10/17 Python
python 列表、字典和集合的添加和删除操作
2019/12/16 Python
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
幼儿园数学教学反思
2014/02/02 职场文书
校园安全广播稿
2014/02/08 职场文书
简单的项目建议书模板
2014/03/12 职场文书
行政部经理助理岗位职责
2014/06/15 职场文书
商业企业管理专业求职信
2014/07/10 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书
《认识钟表》教学反思
2016/02/16 职场文书