X
活动推荐

阿里云高性能云主机2折293元/年

企业级性能云服务器限时2折起
新用户5折爆款服务器会场
查看详情 293元/年
阅读模式:

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

查看:7780  回复:0  类型:  来源:php自学网  标签 php tcp/ip协议

        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
/*获取客户端真实的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

分享到:
0 0

*有问题之处烦请在评论中指出非常感谢!
不是我想要的内容,继续搜索:

扫描二维码手机查看

发布评论:


登录:
  表情:
评论话题
推荐阅读:
php连接redis   阅读:4752centos 7 安装 mysql-5.7   阅读:5194爱编程,也爱健康   阅读:3422面试都会问你为什么你从上一家公司离职的真实意思   阅读:9460简单的DOS攻击之死亡之ping详解   阅读:39884Nginx 配置文件详解   阅读:3892javascript获取两个日期间的所有日期   阅读:5180centos 7 安装 samba 服务   阅读:5446Nginx 配置文件详解   阅读:3892phpexcel 超简单从excel表格一键导入数据到数据库教程   阅读:10773网站局部小图片优化-base64编码图片   阅读:8062php连接redis   阅读:4752centos 7 安装 redis 3.2.9   阅读:5643centos 7 设置 nginx-1.11.10 开机启动   阅读:6959centos 7 安装 redis 3.2.9   阅读:5643centos 7 开启网络   阅读:5189小米手机端商城rem适配原理   阅读:5940网站性能优化-页面静态缓存   阅读:4712linux php7安装yaf扩展   阅读:6811人性漫画:打工与创业的残酷区别   阅读:3888mysql的四种索引类型   阅读:17902什么是天使轮?什么是A轮融资?B轮融资?   阅读:3397centos 7 安装 php-7.1.3   阅读:16581centos 7 安装 php-7.1.3   阅读:16581php翻转字符串   阅读:2486php压缩页面的html代码一行显示   阅读:5972一键分享到QQ空间、QQ好友、新浪微博、微信代码   阅读:114508php 使用 smtp.php 类在线发送邮件功能   阅读:4642php 获取当前前后年、月、星期、日、时分秒的时间   阅读:5396crontab+shell脚本实现定时备份mysql数据库   阅读:6284phpexcel 超简单从数据库一键导出数据到excel教程   阅读:6277linux rarcrack破解rar、zip和7z压缩包简单密码的工具   阅读:13442csv文件一键导入数据到mysql数据库   阅读:5626面试的时候回去等通知,等电话的真实意思   阅读:20028php+redis实现消息队列   阅读:11193php中地址引用&的真正理解-变量引用、函数引用、对象引用   阅读:4707十张GIF让你弄懂递归等概念   阅读:5080shell脚本统计当前服务器并发连接数   阅读:5855mysql的四种索引类型   阅读:17902centos 7 安装 redis 3.2.9   阅读:5643centos 7 安装 php-7.1.3   阅读:16581centos 7 安装 php-7.1.3   阅读:16581web性能测试工具ab的测试方法   阅读:3882linux时间戳有趣的情人节秒1234567890   阅读:4609centos 7 忘记root密码   阅读:3986封装php redis缓存操作类   阅读:7473php生成二维码   阅读:4893linux php7编译安装mongodb扩展   阅读:6965phpexcel 超简单从excel表格一键导入数据到数据库教程   阅读:10773centos 7 安装 nginx-1.11.10   阅读:7098