java apnic_根据apnic公开的cn地址段,判断某个ip地址是否为国内ip地址。

该项目提供了一个名为CNIPRecognizer的工具类,用于根据APNIC公开的CN地址段判断IP地址是否在国内。通过读取APNIC的最新数据,进行地址段合并并生成Java代码,以高效地进行IP归属地判断。示例展示了如何使用该工具类,并提到原始数据有7637条记录,处理后减少到3365条。
摘要由CSDN通过智能技术生成

介绍

本项目包含一个工具类CNIPRecognizer,用于判断某个ip是否为国内ip。判断原理很简单,如果该ip存在于apnic公开的cn地址段中则认为它是国内ip。示例代码:

System.out.println("8.8.8.8: " + CNIPRecognizer.isCNIP("8.8.8.8"));

System.out.println("114.114.114.114: " + CNIPRecognizer.isCNIP("114.114.114.114"));

如何更新apnic地址段?

通过如下Scala代码生成相应的Java代码,然后将生成的代码覆盖CNIPRecognizer类中相应部分:

Source.fromFile("D:/delegated-apnic-latest", "utf-8").getLines()

.filter(_.startsWith("apnic|CN|ipv4|"))

.map(_.split("\\|")).filter(_.length == 7)

.map(arr => (IPUtil.ipToLong(arr(3)), arr(4).toLong))

.toList.sortBy(_._1)

.foldLeft(List.empty[(Long, Long)]){ (list, t) =>

list match {

case head :: tail =>

if(head._1 + head._2 == t._1){ head.copy(_2 = head._2 + t._2) :: tail } else { t :: list }

case Nil =>

t :: Nil

}

}.reverse.zipWithIndex.foreach{ case (t, i) =>{

if(i % 1000 == 0){

if(i > 0){

println("}")

}

println(s"private static void init${i/1000}(List list){")

}

println(s"list.add(new CNRecord(${t._1}L, ${t._2}));")

}}

println("}")

为了减少生成的代码行数,针对原始的apnic进行了ip地址段合并,合并前的地址段有7637条记录,合并后剩余3365条。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值