Этот проект включает в себя утилитный класс CNIPRecognizer
, который используется для проверки, является ли определённый IP адресом внутренним для Китая. Принцип проверки очень прост: если данный IP находится в открытом сегменте адресов apnic для КНР, то считается, что это внутренний 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"));
Для генерации соответствующего Java кода можно использовать следующий Scala код, а затем заменить сгенерированный код в соответствующих частях класса 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<CNRecord> list){")
}
println(s"list.add(new CNRecord(${t._1}L, ${t._2}));")
}}
println("}")
Чтобы уменьшить количество строк сгенерированного кода, были объединены исходные сегменты адресов apnic. До объединения было 7637 записей, после — 3365.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )