没有最DT只有更DT,【NET类分享】

发布时间:2016-12-8 0:21:23 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"没有最DT只有更DT,【NET类分享】",主要涉及到没有最DT只有更DT,【NET类分享】方面的内容,对于没有最DT只有更DT,【NET类分享】感兴趣的同学可以参考一下。

有个问题困扰了好久了,如何处理网站访问者的身份呢?IP吗?如果用户改IP呢?后来想到了用户电脑的MAC地址是唯一的,OK想办法拿到用户MAC地址 问题就解决了。但是怎么拿又是个问题,全网上查 了下,发现一个拿自己MAC的方法,但是不是我们要的结果啊,肿么办?DT的问了老师,他说PHP不能获取到MAC地址,当时好伤心啊。后来想想或许大神 是真不知道吧。但是,关荣的遇上了强哥(李强强老师),强哥V5啊!在强哥的课堂是一不小心学到了一个关于操作MAC的函数,太happy了,灵感来 了!arp -a (linux上是直接用arp 就行) 只要用户登录你的网站就会建立通信,然后他的MAC就存到你的arp列表中。在php上使用exec()函数可以执行DOS命令,然后把exec()执行 的结果赋值给一个数组,下图是在DOS上的结果---------------------------------------------------------------------------------- C:\Documents and Settings\Administrator>arp -aInterface: 192.168.100.254 --- 0x2  Internet Address      Physical Address      Type  192.168.100.137       00-00-00-00-00-00     invalidInterface: 192.168.60.29 --- 0x3  Internet Address      Physical Address      Type  192.168.60.1          3c-e5-a6-0c-60-bb     dynamic  192.168.60.4          00-1f-c6-e9-4c-a3     dynamic  192.168.60.13         00-16-d3-2f-83-55     dynamic  192.168.60.28         00-15-58-7b-72-92     dynamic  192.168.60.100        dc-0e-a1-5f-57-a6     dynamic  192.168.60.179        00-15-58-81-07-4e     dynamic  192.168.60.214        00-16-41-17-f0-d1     dynamic---------------------------------------------------------------------------------- 得到这个数组后我们就可以拿到用户的mac了,这里会用到一些字符串处理函数,推荐大家使用explode(),很快就拿到自己想要的数据了,是不是很happy。在 笔者测试的时候也发现了一些问题,需要继续完善下,这个命令在windows环境下跑的很好,但到linux下就捉襟见肘了,不过这里大体思路完成了,只 要在用户访问网站时,先判断下用户的操作系统然后对应的选择NET类中的方法就解决问题了,话说linux下用awk会比php的字符串操作函数更方便, 期待大家共同完善,和提出新的问题,共同进步!下面附上源码。<!--Net.class.php--><?php/***采集访问者网络信息**/class [email protected] string $hostMac     [email protected] string $Vip         [email protected] string $Vmac         客户端MAC地址**/    private $hostMac=array();    static $Vip=NULL;    private $pos;    static $Vmac=NULL;        private $Maclist=array();        /**    *获取服务器的MAC地址    [email protected] int $Tmpa             支持for循环的临时参数    [email protected] array $Tmarr             存放列表信息的临时数组    [email protected]  返回值:服务器的MAC    */    public function getHostMac(){        @exec("ipconfig/all",$Tmarr);        for($Tmpa;$Tmpa<count($Tmarr);$Tmpa++){            if(eregi("Physical",$Tmarr[$Tmpa])){                $this->hostMac=explode(":",$Tmarr[$Tmpa]);                }        }        return $this->hostMac[1];        }    /**    *获取客户端的IP地址    [email protected] int $Tmpa             支持for循环的临时参数    [email protected] array $Tmarr             存放列表信息的临时数组            [email protected] 返回值:客户端IP    */    public function getVisitIp() {        if (self::$Vip !== NULL){            return self::$Vip;            }        if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])){            $Tmarr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);            $pos = array_search('unknown',$Tmarr);            if(false !== $pos){                unset($Tmarr[$pos]);            }            echo self::$Vip;            die();        }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {            self::$Vip = $_SERVER['HTTP_CLIENT_IP'];        }elseif (isset($_SERVER['REMOTE_ADDR'])) {            self::$Vip = $_SERVER['REMOTE_ADDR'];        }        // IP地址合法验证        self::$Vip = (false !== ip2long(self::$Vip)) ? self::$Vip : '0.0.0.0';        return self::$Vip;    }    /**    *获取客户端的MAC地址    *    [email protected] int $Tmpa             支持for循环的临时参数    [email protected] array $Tmarr             存放列表信息的临时数组        [email protected] 返回值:客户端MAC    */    public function getVisitMac(){        @exec("arp -a",$Tmarr);        $ip=$this->getVisitIp();        for($Tmpa;$Tmpa<count($Tmarr);$Tmpa++){            if(eregi($ip,$Tmarr[$Tmpa])){                self::$Vmac=explode(" ",$Tmarr[$Tmpa]);                }        }        return self::$Vmac[11];    }    public    function filter($mac,$ip){        //定义一个过滤MAC的函数 @return string $clinetMac         $Ecar=array_shift($mac);        while(count($mac)<>0){            $Ecar=array_pop($mac);            if(substr_count($Ecar,$ip)==1){                $clientMac=trim($Ecar);                $clientMac=str_replace($ip," ",$clientMac);                $clientMac=str_split(trim($clientMac),17);                return $clientMac=$clientMac[0];            }        }    }}?> 管理员在2009年8月13日编辑了该文章文章。 --> --> 阅读(36) | 评论(0) | 转发(0) | 0 上一篇:自己的一点感想 下一篇:两个月了,我终于浮出了水面(不再潜水了).... 相关热门文章 欢迎grade1984在ChinaUnix博客... 欢迎xiaomengsoma在ChinaUnix... 欢迎force_with_you在ChinaUni... 欢迎diyff83在ChinaUnix博客安... 欢迎ceovok在ChinaUnix博客安... 毕业五年(续) 毕业五年 职业生涯规划 中国软件开发工程师之痛... 闲置书处理! 大家都是用什么来管理hadoop集... 网站被人挂了吗,添加了些程序... Nginx如何保证不走宕机的那个... 大家谈谈MYSQL客户端和服务器... 以下代码运行后为何会输出5?... 热门推荐 --> 给主人留下些什么吧!~~ 评论热议

上一篇:自己的一点感想
下一篇:54期的冠军们(二)

相关文章

相关评论