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+DBM的同学录程序(3)
Oct 09 PHP
mysql limit查询优化分析
Nov 12 PHP
php中几种常见安全设置详解
Apr 06 PHP
php中使用addslashes函数报错问题的解决方法
Feb 06 PHP
PHP程序漏洞产生的原因分析与防范方法说明
Mar 06 PHP
PHP之uniqid()函数用法
Nov 03 PHP
codeigniter中实现一次性加载多个view的方法
Mar 20 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
Jul 02 PHP
PHP 设计模式系列之 specification规格模式
Jan 10 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
Feb 07 PHP
PHP中常用的魔术方法
Apr 28 PHP
PHP基于面向对象实现的留言本功能实例
Apr 04 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
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
简单的过滤字符串中的HTML标记
2006/12/25 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
2014/07/15 PHP
getimagesize获取图片尺寸实例
2014/11/15 PHP
兼容ie和firefox js关闭代码
2008/12/11 Javascript
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
html a标签-超链接中confirm方法使用介绍
2013/01/04 Javascript
使用JavaScript动态设置样式实现代码及演示动画
2013/01/25 Javascript
jQuery 计算iframe 窗口大小的方法
2014/05/13 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
2014/08/30 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
AngularJS入门心得之directive和controller通信过程
2016/01/25 Javascript
AngularJS教程之简单应用程序示例
2016/08/16 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
webpack的 rquire.context用法实现工程自动化的方法
2020/02/07 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
[01:11:48]Fnatic vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
wxpython 最小化到托盘与欢迎图片的实现方法
2014/06/09 Python
深入理解python中的select模块
2017/04/23 Python
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
天猫国际进口超市直营:官方直采,一站购齐
2017/12/11 全球购物
美国瑜伽服装和装备购物网站:Mukha Yoga
2019/02/22 全球购物
个人简历自我评价八例
2013/10/31 职场文书
高级工程师英文求职信
2014/03/19 职场文书
对祖国的寄语大全
2014/04/11 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
科学发展观演讲稿
2014/09/11 职场文书
会计师事务所实习证明
2014/11/16 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
解决sql server 数据库,sa用户被锁定的问题
2021/06/11 SQL Server
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android