本文作者:DurkBlue

php如何获取客户端IP真实地址和其IP归属地

DurkBlue 2019-12-18 1990
php如何获取客户端IP真实地址和其IP归属地摘要:         php获取客户端真实ip,这里通过超全局变量$_SERVER进行获取ip。在获取ip时,可以通过 $_S...

        php获取客户端真实ip,这里通过超全局变量$_SERVER进行获取ip。在获取ip时,可以通过 $_SERVER['REMOTE_ADDR'] 就能直接得到ip,但通过$_SERVER['REMOTE_ADDR']获取ip时有可能是获取到用户代理服务器的ip,而代理服务器下的用户真实ip就需要使用$_SERVER['HTTP_X_FORWARDED_FOR']进行获取了,如果用户没有使用代理服务器$_SERVER['HTTP_X_FORWARDED_FOR']就会返回空。所以就有必要下面代码里的那么多判断了。

        获取ip步骤:

            代理服务器ip($_SERVER['HTTP_X_FORWARDED_FOR'])[可在http请求头中伪造]

                    

             客户端ip($_SERVER['HTTP_CLIENT_IP'])[可在http请求头中伪造]

                    

       真实的远程的客户端ip($_SERVER['REMOTE_ADDR'])[不能伪造,位于tcp/ip协议数据包中]         

php获取客户端真实ip代码如下:

php<?php/*获取客户端真实的IP*/function GetIps(){    $realip = '';    $unknown = 'unknown';    if (isset($_SERVER)){        if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && !empty($_SERVER['HTTP_X_FORWARDED_FOR']) && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unknown)){            $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);            foreach($arr as $ip){                $ip = trim($ip);                if ($ip != 'unknown'){                    $realip = $ip;                    break;                }            }        }else if(isset($_SERVER['HTTP_CLIENT_IP']) && !empty($_SERVER['HTTP_CLIENT_IP']) && strcasecmp($_SERVER['HTTP_CLIENT_IP'], $unknown)){            $realip = $_SERVER['HTTP_CLIENT_IP'];        }else if(isset($_SERVER['REMOTE_ADDR']) && !empty($_SERVER['REMOTE_ADDR'])            && strcasecmp($_SERVER['REMOTE_ADDR'], $unknown)){            $realip = $_SERVER['REMOTE_ADDR'];        }else{            $realip = $unknown;        }    }    $realip = preg_match("/[d.]{7,15}/", $realip, $matches) ? $matches[0] : $unknown;    return $realip;} /*把IP传入新浪API返回数据获取ip的真实归属地*/function GetIpFrom($ip = ''){    if(empty($ip)){        $ip = GetIps();    }    $res = @file_get_contents('http://ip.taobao.com/service/getIpInfo.php?ip='.$ip);    return $res;}

        上面的方式获取ip时虽然会有伪造的可能,但也有参考的意义,在一些常用的网站访问情况可以满足,但如果在一些投票网站、购买支付类网站接口还是以 $_SERVER['REMOTE_ADDR']为准会好些。

        获得ip归属地信息的API地址:

            淘宝官方API:http://ip.taobao.com/   

            淘宝接口地址:http://ip.taobao.com/service/getIpInfo.php?ip=IPAddress

            百度官方API: http://apistore.baidu.com/apiworks/servicedetail/114.html

            百度接口地址:http://apis.baidu.com/apistore/iplookupservice/iplookup


此篇短文由DurkBlue发布,写作不易转载请注明来处
文章投稿或转载声明

来源:DurkBlue版权归原作者所有,转载请保留出处。本站文章发布于 2019-12-18
温馨提示:文章内容系作者个人观点,不代表DurkBlue博客对其观点赞同或支持。

赞(0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享