php使用淘宝开放的ip库,查询客户端ip地址所属地区

淘宝公开的IP库http://ip.taobao.com/

淘宝公开的REST API接口:http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串],返回内容以json格式的 

不过限制了每个用户的访问频率需小于10qps

获取ip

一、如果没有使用代理服务器,

  REMOTE_ADDR = 客户端IP    HTTP_X_FORWARDED_FOR = 没数值或不显示

  $ip = $_SERVER['REMOTE_ADDR'];

 

二、使用透明代理,

  REMOTE_ADDR = 最后一个代理服务器 IP
  HTTP_X_FORWARDED_FOR = 客户端真实 IP (经过多个代理服务器时,这个值类似:221.5.252.160, 203.98.182.163, 203.129.72.215)

  这类代理还会将客户真实ip发送到请求对象,无法隐藏真实ip。

  $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];

三、使用普通匿名代理服务器,

  REMOTE_ADDR = 最后一个代理服务器 IP
  HTTP_X_FORWARDED_FOR = 代理服务器 IP (经过多个代理服务器时,这个值类似:203.98.182.163, 203.98.182.163, 203.129.72.215)

  这样就隐藏了客户端的真实ip,但服务器会知道客户端是通过代理服务器去访问的。

四、使用欺骗性代理服务器,

  REMOTE_ADDR = 代理服务器 IP
  HTTP_X_FORWARDED_FOR = 随机的 IP(经过多个代理服务器时,这个值类似:220.4.251.159, 203.98.182.163, 203.129.72.215)

  服务器可以识别到时通过代理服务器访问的,但发送给目标服务器的是虚假ip。

五、使用高匿名代理,

  REMOTE_ADDR = 代理服务器 IP       HTTP_X_FORWARDED_FOR = 没数值或不显示

  使用这种代理时,不同浏览器不同设备会返回不同的ip头信息,因此PHP使用$_SERVER["REMOTE_ADDR"] 、$_SERVER["HTTP_X_FORWARDED_FOR"] 获取的值可能是空值也可能是“unknown”值。

    /*获取客户端ip*/

    protected function getIp()
    {
        if (isset($_SERVER['HTTP_CLIENT_IP']) && strcasecmp($_SERVER['HTTP_CLIENT_IP'], "unknown")) {
            $ip = $_SERVER['HTTP_CLIENT_IP'];
        } else if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], "unknown")) {
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        } else if (isset($_SERVER['REMOTE_ADDR']) && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) {
            $ip = $_SERVER['REMOTE_ADDR'];
        } else if (isset($_SERVER['REMOTE_ADDR']) && isset($_SERVER['REMOTE_ADDR']) && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) {
            $ip = $_SERVER['REMOTE_ADDR'];
        } else {
            $ip = "";
        }

        return ($ip);
    }

根据ip获取归属地址 

    /**
     * @description: 利用淘宝的ip地址库获获取ip + 地址
     * @param {type} 
     * @return: 
     */
    protected function _get_ip_dizhi()
    {
        $opts = array(
            'http' => array(
                'method'  => "GET",
                'timeout' => 5
            ),
        );
        $context = stream_context_create($opts);
        $ip = $this->getIp();
        if (strpos($ip, "127.0.0.") === true) {
            return '';
        }
        $url_ip = 'http://ip.taobao.com/service/getIpInfo.php?ip=' . $ip;

        $str = @file_get_contents($url_ip, false, $context);
        if (!$str) {
            return "";
        }
        $json = json_decode($str, true);
        $country = '';
        $province = '';
        $city = '';
        $area = '';
        if ($json['code'] == 0) {
            // $ipcity = $json['data']['region'] . $json['data']['city'];
            $country = $json['data']['country'];
            $province = $json['data']['region'];
            $city = $json['data']['city'];
            $area = $json['data']['area'];
        }
        $data = compact('country', 'province', 'city', 'area', 'ip');
        return $data;
    }

参考资料:https://www.cnblogs.com/rendd/p/6183094.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值