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 相关文章推荐
rrmdir php中递归删除目录及目录下的文件
May 15 PHP
php性能优化分析工具XDebug 大型网站调试工具
May 22 PHP
几种有用的变型 PHP中循环语句的用法介绍
Jan 30 PHP
基于empty函数的判断详解
Jun 17 PHP
php使用NumberFormatter格式化货币的方法
Mar 21 PHP
分享PHP守护进程类
Dec 30 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
Aug 20 PHP
PHP远程连接oracle数据库操作实现方法图文详解
Apr 11 PHP
CentOS7编译安装php7.1的教程详解
Apr 18 PHP
thinkPHP5.1框架中Request类四种调用方式示例
Aug 03 PHP
PHP实现的文件浏览器功能简单示例
Sep 12 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
Apr 20 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中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
PHP输出日历表代码实例
2015/03/27 PHP
PHP常用设计模式之委托设计模式
2016/02/13 PHP
php 实现银联商务H5支付的示例代码
2019/10/12 PHP
在你的网页中嵌入外部网页的方法
2007/04/02 Javascript
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
2010/03/02 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
2011/12/29 Javascript
javascript陷阱 一不小心你就中招了(字符运算)
2013/11/10 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
JavaScript中字面量与函数的基本使用知识
2015/10/20 Javascript
js 声明数组和向数组中添加对象变量的简单实例
2016/07/28 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
2020/04/17 Javascript
JS实现简单打字测试
2020/06/24 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
[10:28]2018DOTA2国际邀请赛寻真——VGJ.S寻梦之路
2018/08/15 DOTA
零基础写python爬虫之爬虫的定义及URL构成
2014/11/04 Python
python轻松查到删除自己的微信好友
2016/01/10 Python
21行Python代码实现拼写检查器
2016/01/25 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
用python中的matplotlib绘制方程图像代码
2019/11/21 Python
python集成开发环境配置(pycharm)
2020/02/14 Python
tensorflow 实现数据类型转换
2020/02/17 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
美国时装品牌:Nautica(诺帝卡)
2016/08/28 全球购物
英国体育器材进口商店:UK Sport Imports
2017/03/14 全球购物
Java语言的优势
2015/01/10 面试题
幼儿园美术教学反思
2014/01/31 职场文书
文秘班元旦晚会活动策划方案
2014/08/28 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
初中英语教学反思范文
2016/02/15 职场文书
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android