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 无限分类三种方式 非函数的递归调用!
Aug 26 PHP
注册页面之前先验证用户名是否存在的php代码
Jul 14 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
Aug 31 PHP
PHP删除非空目录的函数代码小结
Feb 28 PHP
php发送get、post请求的6种方法简明总结
Jul 08 PHP
支持png透明图片的php生成缩略图类分享
Feb 08 PHP
PHP代码实现表单数据验证类
Jul 28 PHP
ThinkPHP3.2.1图片验证码实现方法
Aug 19 PHP
Yii框架分页实现方法详解
May 20 PHP
PHP模版引擎原理、定义与用法实例
Mar 29 PHP
php封装的pdo数据库操作工具类与用法示例
May 08 PHP
Laravel5.1框架注册中间件的三种场景详解
Jul 09 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
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
PHP+Mysql+jQuery实现动态展示信息
2011/10/08 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
PHP钩子与简单分发方式实例分析
2017/09/04 PHP
PHP ob缓存以及ob函数原理实例解析
2020/11/13 PHP
宝塔面板在NGINX环境中TP5.1如何运行?
2021/03/09 PHP
javascript 鼠标拖动图标技术
2010/02/07 Javascript
JS 自定义函数缺省值的设置方法
2010/05/05 Javascript
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
js和jquery设置disabled属性为true使按钮失效
2014/08/07 Javascript
jQuery获取样式中颜色值的方法
2015/01/29 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
获取url中用&隔开的参数实例(分享)
2017/05/28 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
python删除列表中重复记录的方法
2015/04/28 Python
Python 使用SMTP发送邮件的代码小结
2016/09/21 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
python 使用openpyxl读取excel数据
2021/02/18 Python
iphoneX 适配客户端H5页面的方法教程
2017/12/08 HTML / CSS
国际贸易毕业生求职信范文
2014/02/21 职场文书
体育系毕业生求职自荐信
2014/04/16 职场文书
法制宣传月活动方案
2014/05/11 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
会员卡清退活动总结
2014/08/27 职场文书
小学生勤俭节约演讲稿
2014/08/28 职场文书
2015年世界环境日活动总结
2015/02/11 职场文书
建国大业电影观后感
2015/06/01 职场文书
会计岗位工作总结
2015/08/12 职场文书