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 相关文章推荐
Cannot modify header information错误解决方法
Oct 08 PHP
php学习之数据类型之间的转换介绍
Jun 09 PHP
浅析linux下apache服务器的配置和管理
Aug 10 PHP
PHP使用适合阅读的格式显示文件大小的方法
Mar 05 PHP
WampServer搭建php环境时遇到的问题汇总
Jul 23 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
Oct 01 PHP
php在数据库抽象层简单使用PDO的方法
Nov 03 PHP
PHP递归遍历指定文件夹内的文件实现方法
Nov 15 PHP
微信公众号开发之通过接口删除菜单
Feb 20 PHP
ajax+php实现无刷新验证手机号的实例
Dec 22 PHP
PHP如何通过表单直接提交大文件详解
Jan 08 PHP
使用Git实现Laravel项目的自动化部署
Nov 24 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
模仿OSO的论坛(三)
2006/10/09 PHP
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
php实现文件管理与基础功能操作
2017/03/21 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
2018/12/07 PHP
js给onclick赋值传参数的两种方法
2013/11/25 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
JavaScript获取页面中表单(form)数量的方法
2015/04/03 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
Vue中保存用户登录状态实例代码
2017/06/07 Javascript
jQuery Validate表单验证插件实现代码
2017/06/08 jQuery
Vue学习之路之登录注册实例代码
2017/07/06 Javascript
js 事件的传播机制(实例讲解)
2017/07/20 Javascript
Vue中android4.4不兼容问题的解决方法
2018/09/04 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
微信小程序封装分享与分销功能过程解析
2019/08/13 Javascript
vue.js中ref和$refs的使用及示例讲解
2019/08/14 Javascript
vue给对象动态添加属性和值的实例
2019/09/09 Javascript
vux-scroller实现移动端上拉加载功能过程解析
2019/10/08 Javascript
python教程之用py2exe将PY文件转成EXE文件
2014/06/12 Python
python将文本分每两行一组并保存到文件
2018/03/19 Python
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
python读取tif图片时保留其16bit的编码格式实例
2020/01/13 Python
Django URL参数Template反向解析
2020/11/24 Python
Jabra捷波朗美国官网:用于办公、车载和运动的无线蓝牙耳麦
2017/02/01 全球购物
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
柏林通行证:Berlin Pass
2018/04/11 全球购物
C#如何调用Windows程序打开一个文档
2014/12/26 面试题
八一慰问活动方案
2014/02/07 职场文书
人力资源部经理岗位职责规定
2014/02/23 职场文书
总经理助理岗位职责范本
2014/07/20 职场文书
Golang实现AES对称加密的过程详解
2021/05/20 Golang
python 离散点图画法的实现
2022/04/01 Python