PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码


Posted in PHP onAugust 11, 2011
function ce_getmac() 
{ 
if(PHP_OS == 'WINNT') 
{ 
$return_array = array(); 
$temp_array = array(); 
$mac_addr = ""; 
@exec("arp -a",$return_array); 
foreach($return_array as $value) 
{ 
if(strpos($value,$_SERVER["HTTP_CLIENT_IP"]) !== false && 
preg_match("/(:?[0-9a-f]{2}[:-]){5}[0-9a-f]{2}/i",$value,$temp_array)) 
{ 
$mac_addr = $temp_array[0]; 
break; 
} 
} 
return $mac_addr ? strtoupper($mac_addr) : ''; 
} 
else if(PHP_OS == 'Linux') 
{ 
return true; 
} 
}

函数已经修改过了,到LINUX上发现不能使用EXEC函数,也就是获取不到MAC地址了。经过沟通,该项目必须部署在LINUX服务器下,笔者经过苦思冥想了半天终于找到了一个解决方案,不用执行EXEC也可以获取到内网用户的MAC地址。
在内网服务器中,有一台192.168.1.151的服务器,服务器上一个API,访问这个API,就获取用户MAC,JOSN的方式输出用户账号信息,因为该服务器可以获取MAC,就可以稍加利用了。
使用CURL伪造来源IP方式(IP不是LINUX服务器的IP,是客户端访问的IP地址),CURL到151服务器,服务器得到相应,根据用户IP地址 和ARP -A 参数的正则方式就可以得到客户端的MAC地址,程序运行在151,而151是WINDOWS 2008服务器。但是要注意的是不能使用REMOTE_ADDR,必须使用HTTP_CLIENT_IP。 原因是HTTP_CLIENT_IP可以使用CURL伪造,这样就可以使用LINUX获取用户IP,然后传送给151处理。
疑问:根据用户IP获取MAC地址,那用户换一个IP了怎么办呢?使用CMD下 ARP -A分析,即使用户跟换IP,但是对应该用户的这台计算机的MAC地址默认是不会更换的。

下面是摘抄网友的关于获取IP的文章:
dz的代码判断IP那块太让人头疼了,日,REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR三个东西在手册上太不详细了,基本上就等于没有。
网上gg了一下,找到一点,另外,有一个思路太巧了,用JS取IP以后POST到服务器,Y的用代理骗服务器?有种上网先把Js给关了啊!!哦哈哈,以后有机会用ajax试一下,也省得用这三个变量if得死去活来了。

$_SERVER['...']; // for php
一、没有使用代理服务器的情况:
REMOTE_ADDR = 您的 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示
二、使用透明代理服务器的情况:Transparent Proxies
REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。
三、使用普通匿名代理服务器的情况:Anonymous Proxies
REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。
四、使用欺骗性代理服务器的情况:Distorting Proxies
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。
五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。

REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。
HTTP_CLIENT_IP 是代理服务器发送的HTTP头。如果是“超级匿名代理”,则返回none值。同样,REMOTE_ADDR也会被替换为这个代理服务器的IP。
$_SERVER['REMOTE_ADDR']; //访问端(有可能是用户,有可能是代理的)IP
$_SERVER['HTTP_CLIENT_IP']; //代理端的(有可能存在,可伪造)
$_SERVER['HTTP_X_FORWARDED_FOR']; //用户是在哪个IP使用的代理(有可能存在,也可以伪造)

PHP 相关文章推荐
中国站长站 For Dede4.0 采集规则
May 27 PHP
微博短链接算法php版本实现代码
Sep 15 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
Feb 18 PHP
php 目录遍历、删除 函数的使用介绍
Apr 28 PHP
zf框架的校验器InArray使用示例
Mar 13 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
Mar 18 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
Dec 16 PHP
smarty模板引擎中变量及变量修饰器用法实例
Jan 22 PHP
分析PHP中单双引号的误区和双引号小隐患
Jul 19 PHP
PHP实现批量检测网站是否能够正常打开的方法
Aug 23 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
php 文章调用类代码
Aug 11 #PHP
初学PHP的朋友 经常问的一些问题。不断更新
Aug 11 #PHP
shopex中集成的站长统计功能的代码简单分析
Aug 11 #PHP
pdo中使用参数化查询sql
Aug 11 #PHP
php 广告调用类代码(支持Flash调用)
Aug 11 #PHP
php 中英文语言转换类代码
Aug 11 #PHP
php中计算中文字符串长度、截取中文字符串的函数代码
Aug 09 #PHP
You might like
PHP实现数组array转换成xml的方法
2016/07/19 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
2016/09/23 PHP
ajax中get和post的说明及使用与区别
2012/12/23 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
js动态添加事件并可传参数示例代码
2013/10/21 Javascript
js onload处理html页面加载之后的事件
2013/10/30 Javascript
jQuery实现contains方法不区分大小写的方法
2015/02/13 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
Bootstrap 轮播(Carousel)插件
2016/12/26 Javascript
js实现消息滚动效果
2017/01/18 Javascript
angular.js指令中的controller、compile与link函数的不同之处
2017/05/10 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
JavaScript根据json生成html表格的示例代码
2018/10/24 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
2018/11/28 Javascript
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
javascript中call,apply,callee,caller用法实例分析
2019/07/24 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
2020/01/12 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
零基础学Python(一)Python环境安装
2014/08/20 Python
python删除服务器文件代码示例
2018/02/09 Python
python继承threading.Thread实现有返回值的子类实例
2020/05/02 Python
Python中实现输入一个整数的案例
2020/05/03 Python
使用py-spy解决scrapy卡死的问题方法
2020/09/29 Python
python如何调用php文件中的函数详解
2020/12/29 Python
便携式太阳能系统的创新者:GOAL ZERO
2018/02/04 全球购物
Anthropologie英国:美国家喻户晓的休闲服装和家居产品品牌
2018/12/05 全球购物
Dodax奥地利:音乐、电影、书籍、玩具、电子产品等
2019/08/31 全球购物
自主招生自荐信格式
2013/12/03 职场文书
学习十八大报告感言
2014/02/28 职场文书
运动会演讲稿300字
2014/08/25 职场文书
授权委托书(完整版)
2014/09/10 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书
HTML中的表单元素介绍
2022/02/28 HTML / CSS