php判断当前访问的是在国内还是在国外_怎么判断非法ip地址

php判断当前访问的是在国内还是在国外_怎么判断非法ip地址方案一使用淘宝接口/***使用淘宝接口判断ip*@param$ip*@returnbool*/publicfunctionjudgeIpByTaobao($ip){$url=”http://ip.taobao.com/service/getIpInfo.php?ip=”.$ip;$res=f

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

方案一 使用淘宝接口

 /** * 使用淘宝接口 判断ip * @param $ip * @return bool */
   public function judgeIpByTaobao($ip) { 
      
       $url = "http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;
       $res = file_get_contents($url);
       if (!empty($res)) {
          $ipData = json_decode($res,true);
          if ($ipData['code']==0 && in_array($ipData['data']['country_id'],['CN','HK','TW'])) {
              return true;
          }
       }
       return false;
   }

方案二 定期获取Apnic分配给中国的IP网段 列表

Apnic是全球5个地区级的Internet注册机构(RIR)之一,负责亚太地区的以下一些事务:
(1)分配IPv4和IPv6地址空间,AS号
(2)为亚太地区维护Whois数据库
(3)反向DNS指派
(4)在全球范围内作为亚太地区的Internet社区的代表

1) 使用shell定期获取IP网段列表

curl 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | grep ipv4 | grep CN | awk -F\| '{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }' >china_ip.txt

最终得到的IP网段数据如下

1.0.1.0/24
1.0.2.0/23
1.0.8.0/21
1.0.32.0/19
1.1.0.0/24
1.1.2.0/23
1.1.4.0/22
1.1.8.0/24
...省略.....
223.255.252.0/23
返回约8000个网段数据

2)使用函数判断指定IP是否存在指定网段中

/** * 给定一个ip 一个网段 判断该ip是否属于该网段 * @param $ip * @param $networkRange * @return bool 属于返回true 不属于返回false */
   public static function judge($ip, $networkRange) { 
   
        $ip = (double) (sprintf("%u", ip2long($ip)));
        $s = explode('/', $networkRange);
        $network_start = (double) (sprintf("%u", ip2long($s[0])));
        $network_len = pow(2, 32 - $s[1]);
        $network_end = $network_start + $network_len - 1;

        if ($ip >= $network_start && $ip <= $network_end) {
            return true;
        }
        return false;
   }

3)把网段数据处理后 保存到redis中

使用网段掩码,ip2long函数进行相关计算得到网段的开始值结束值(见上面的函数),根据自己的情况,选择最合适的数据结构,保存到redis中。

4)快速比较
指定IP使用ip2long函数得到ip转为整数的值,判断值是否在任一一个区间中。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193211.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何在Ubuntu上安装GCC编译器

    如何在Ubuntu上安装GCC编译器如何在Ubuntu上安装GCC编译器1.首先更新包列表sudoaptupdate2.安装build-essential软件包:sudoaptinstallbuild-essential3.验证GCC编译器是否已成功安装,请使用gcc–version命令打印GCC版本root@ubuntu:/home/csd#gcc–version…

    2022年7月24日
    9
  • matlab求解高阶常微分方程_状态依赖时滞微分方程的动力学研究

    matlab求解高阶常微分方程_状态依赖时滞微分方程的动力学研究**前言:**大学期间只学习过《常微分方程》,没想到有些学校竟然还学《时滞微分方程》,于是找到一本由内藤敏机(日本)等著,马万彪等译的《时滞微分方程——泛函数微分方程引论》(有需要的可以私聊,CSDN貌似上传不了书籍,说侵权emmm),看着头秃,不过受到不少启发,尤其是对Logistic方程的改进,真真是长见识了。没找到有人用欧拉法解一阶时滞微分方程的,于是一不做二不休便用MATLAB实现了一下下…

    2022年10月1日
    3
  • 如何找到spring的官方文档[通俗易懂]

    如何找到spring的官方文档[通俗易懂]最近因为项目中遇到了一些问题,百度不到比较好的方案,就准备去看下spring的官方文档,在此记录下:1.进入springframework的官网项目页面:https://spring.io/projects/spring-framework2.点击文档,进入文档的htmlsingle模式页面,复制浏览器的地址如下图:3.地址栏的地址”https://d…

    2025年9月16日
    4
  • nginx的四个基本功能

    nginx的四个基本功能

    2021年10月29日
    41
  • PSPNet介绍-语义分割

    PSPNet-PyramidSceneParsingNetwork核心模块是金字塔池化模块(pyramidpoolingmodule),它能够聚合不同区域的上下文信息,从而提高获取全局信息的能力。实验表明这样的先验表示(即指代PSP这个结构)是有效的,在多个数据集上展现了优良的效果。1.pyramidpoolingmodule该模块融合了4种不同金字塔尺度的特征,第一行…

    2022年4月5日
    221
  • iOS APP上架被拒重新提交审核教程

    iOS APP上架被拒重新提交审核教程

    2021年7月11日
    114

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号