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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux当前时间命令(shell脚本获取当前日期前一天)

    主要介绍Linux常用命令,可以帮助新手快速掌握Linux系统的基本使用,值得收藏。。

    2022年4月15日
    161
  • 车载以太网之 DHCP协议「建议收藏」

    车载以太网之 DHCP协议「建议收藏」车载以太网与传统以太网的主要区别在于二者的物理层,前者的物理层采用一对双绞线的100BASE-T1,而后者的物理层采用两对双绞线的方式,比如100BASE-TX。而二层以上的协议栈,车载网络则基本借鉴传统网络,区别并不大。下图是基于车载以太网的车载网络所使用的各种通信协议,在这篇文章中我将简要介绍一下位于7层上的DHCP协议。车载以太网涉包含的各种协议DHCP的全称是DynamicHostConfigurationProtocol,翻译作动态主机配置协议。它的用途是为网络节点自动配置I

    2022年5月23日
    116
  • LM优化算法_lm算法内参计算

    LM优化算法_lm算法内参计算LM算法理论知识梯度下降高斯牛顿Levenberg–Marquardt算法框架算法的整体流程求解器update流程说明算法实现头文件cpp算法调用LM优化算法,是一种非线性优化算法,其可以看作是梯度下降和高斯牛顿法的结合。综合了梯度下降对初值不敏感和高斯牛顿在最优值附近收敛速度快的特点。本人非数学专业,且对算法理解可能不到位,详细的算法推导及各个优化算法之间的关系,非常推荐看**《METHODSFORNON-LINEARLEASTSQUARESPROBLEMS》**,其介绍更详细也更专业。

    2022年9月30日
    0
  • 2021Java高级面试题及答案,太牛了!

    2021Java高级面试题及答案,太牛了!什么是RPC?RPC原理是什么?什么是RPC?RPC(RemoteProcedureCall)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。比如两个不同的服务A、B部署在两台不同的机器上,那么服务A如果想要调用服务B中的某个方法该怎么办呢?使用HTTP请求当然可以,但是可能会比较慢而且一些优化做的并不好。RPC的出现就是为了解决这个问题。RPC原理是什么?服务消费方(client)调用以本地调用方式调用服务;client

    2022年7月18日
    18
  • Python学生信息管理系统课程设计报告_python做的项目管理系统

    Python学生信息管理系统课程设计报告_python做的项目管理系统1.本人第一次学python做出来的,当时满满的成就感,当作纪念!!!!!非常简单,复制即可使用代码块importjson#把字符串类型的数据转换成Python基本数据类型或者将Python基本数据类型转换成字符串类型。deflogin_user():whileTrue:register=input(‘学生姓名:’)try:…

    2022年10月10日
    1
  • 计算机等级二级java试题(计算机二级考试题库)

    第一章数据结构与算法【考点1】算法的基本概念1、算法:是指一组有穷的指令集,是解题方案的准确而完整的描述。算法不等于程序,也不等于计算方法。2、算法的基本特征:1)确定性,算法中每一步骤都必须有明确定义,不允许有多义性;2)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止;3)可行性,算法原则上能够精确地执行;4)拥有足够的情报。3、算法的组成…

    2022年4月10日
    88

发表回复

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

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