zoukankan      html  css  js  c++  java
  • PHP 获取内网用户MAC地址(WINDOWS/linux)解决方案

    简介:这是PHP 获取内网用户MAC地址(WINDOWS/linux)解决方案的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=343814' scrolling='no'>

    做一个内网根据MAC地址自动登录的应用,在WINDOW 2003可以正常使用,函数如下

    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使用的代理(有可能存在,也可以伪造)

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/343814.html pageNo:5
  • 相关阅读:
    C#学习笔记:多态与隐藏,覆盖
    HTML与XML数据的结合小总结
    基于角色(RoleBased)的表单验证
    去除C++String的首尾空格
    Bash Shell中命令行选项/参数处理
    linux shell 执行多个命令的几种方法
    gdb 多线程调试
    linux 时间戳及时间差计算
    oracle sql日期比较
    在Fedora 14上安装Sun JDK 6
  • 原文地址:https://www.cnblogs.com/ooooo/p/2241971.html
Copyright © 2011-2022 走看看