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 相关文章推荐
PHP自动生成月历代码
Oct 09 PHP
php学习之 循环结构实现代码
Jun 09 PHP
Php output buffering缓存及程序缓存深入解析
Jul 15 PHP
PHP上传图片进行等比缩放可增加水印功能
Jan 13 PHP
PHP比你想象的好得多
Nov 27 PHP
PHP利用APC模块实现文件上传进度条的方法
Jan 26 PHP
php实现的mongodb操作类实例
Apr 03 PHP
WordPress中调试缩略图的相关PHP函数使用解析
Jan 07 PHP
PHP defined()函数的使用图文详解
Jul 20 PHP
php求斐波那契数的两种实现方式【递归与递推】
Sep 09 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 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
2006/12/14 PHP
php中get_object_vars()方法用法实例
2015/02/08 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
2018/01/15 PHP
JSON.stringify 语法实例讲解
2012/03/14 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
js中方法重载如何实现?以及函数的参数问题
2013/08/01 Javascript
SOSO地图JS画出标注和中心点以html形式运行
2013/08/09 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
2014/05/16 Javascript
node.js Web应用框架Express入门指南
2014/05/28 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
JavaScript原生对象之Number对象的属性和方法详解
2015/03/13 Javascript
简化版手机端照片预览组件
2015/04/13 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
2016/08/08 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
2017/01/04 Javascript
网页中右键功能的实现方法之contextMenu的使用
2017/02/20 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
jQuery实现动态添加、删除按钮及input输入框的方法
2017/04/27 jQuery
mongoose更新对象的两种方法示例比较
2017/12/19 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
微信小程序vant弹窗组件的实现方式
2020/02/21 Javascript
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
[55:48]VGJ.S vs TNC Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
[01:12:44]VG vs Mineski Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
Django获取该数据的上一条和下一条方法
2019/08/12 Python
python实现生成Word、docx文件的方法分析
2019/08/30 Python
Django限制API访问频率常用方法解析
2020/10/12 Python
python将下载到本地m3u8视频合成MP4的代码详解
2020/11/24 Python
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
梅西百货官网:Macy’s
2020/08/04 全球购物
学生实习自我鉴定
2013/10/11 职场文书
教师求职信范文分享
2013/12/27 职场文书
买卖协议书范本
2014/04/21 职场文书
考察邀请函范文
2015/01/31 职场文书