ip2region IPV4&IPV6 java 编译生成地址库

ip2region

官方地址:https://gitee.com/lionsoul/ip2region/tree/master/maker/java#xdb-%E6%95%B0%E6%8D%AE%E7%BC%96%E8%BE%91

流程:

1. 安装java1.7

官方地址:https://www.oracle.com/cn/java/technologies/javase/javase7-archive-downloads.html
1)下载安装包:
在这里插入图片描述
2)解压

cd /usr/local
mkdir java
cd java
tar -zxvf jdk-7u80-linux-x64.tar.gz

3)配置环境变量vi /etc/profile

JAVA_HOME=/usr/local/java/jdk1.7.0_80
JRE_HOME=/usr/local/java/jdk1.7.0_80/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

配置完成后source /etc/profile
4)查看java版本java -version

2. 安装apache-maven-3.8.8

mvn官方地址:https://maven.apache.org/download.cgi
1)下载安装包:
在这里插入图片描述
2)解压

tar -zxvf apache-maven-3.8.8-bin.tar.gz
cd apache-maven-3.6.3   #进入apache-maven-3.6.3目录
mkdir ck    #创建ck目录
cd conf

3)vi settings.xml找到·localRepository下面复制一行加上/usr/local/apache-maven-3.8.8/ck, 在找到mirror 加上阿里的仓库配置,修改java版本,配置完成报错退出:

<localRepository>/usr/local/apache-maven-3.8.8/ck</localRepository>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>

如图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4)修改环境变量vi /etc/profile或vi ~/.bashrc,配置完保存退出
添加内容如下:

export MAVEN_HOME=/usr/local/apache-maven-3.8.8
export PATH=$PATH:$MAVEN_HOME/bin

退出后source /etc/profile
5)查看mvn版本:

mvn -v

在这里插入图片描述

3. 生成xdb文件

cd ip2region/maker/java
mvn clean compile package
java -jar ./target/ip2region-maker-1.0.0.jar --src=../../data/ip.merge.txt --dst=./ip2region.xdb

4. java测试

通过 maven 来编译测试程序

cd binding/java/
mvn compile package
java -jar target/ip2region-2.7.0.jar search --db=../../maker/java/ip2region.xdb

在这里插入图片描述

ip2region IPV4&IPV6

官方地址:https://github.com/amazingWu/ip2region-v6?tab=readme-ov-file

流程:

1. 安装java8

1)安装

yum install java-1.8.0-openjdk-devel.x86_64 -y

2)修改环境变量vi /etc/profile:

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.402.b06-1.el7_9.x86_64
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

配置完成后source /etc/profile
3)查看java版本java -version

2. mvn

1)修改mvn配置
在这里插入图片描述
2)查看mvn
在这里插入图片描述

3. 生成db文件

1)下载ip2region-v6安装包
官方地址:https://github.com/amazingWu/ip2region-v6?tab=readme-ov-file
2)解压

unzip ip2region-v6-master.zip
cd ip2region-v6/maker/java

3)修改配置等
1)修改pom.xml
参考:https://mvnrepository.com/artifact/org.lionsoul/ip2region
在这里插入图片描述
在这里插入图片描述

<dependency>
	<groupId>org.ip2region</groupId>
	<artifactId>ip2region-search</artifactId>
	<version>${ip2region-search.version}</version>
</dependency>

修改为:

<dependency>
	<groupId>org.lionsoul</groupId>
	<artifactId>ip2region</artifactId>
	<version>2.7.0</version>
</dependency>

2)当前路径下缺少相关文件,拷贝文件到对应位置

cd src/main/java/org/lionsoul/ip2region
cp -r /root/test/ip/ip2region-v6-master/binding/java/src/main/java/org/lionsoul/ip2region/utils/ ./
cp -r /root/test/ip/ip2region-v6-master/binding/java/src/main/java/org/lionsoul/ip2region/entity/ ./
cp -r /root/test/ip/ip2region-v6-master/binding/java/src/main/java/org/lionsoul/ip2region/constant/ ./
cp /root/test/ip/ip2region-v6-master/binding/java/src/main/java/org/lionsoul/ip2region/DbType.java ./
cd -

3)生成db文件:

mvn package -Dmaven.test.skip=true
java -jar ./target/ip2region-maker-1.0-SNAPSHOT-with-dependencies.jar -s ../../data/ipv6_merge.txt -f ipv6.db -t ipv6
java -jar ./target/ip2region-maker-1.0-SNAPSHOT-with-dependencies.jar -s ../../data/ipv4.merge.txt -f ipv4_netease.db -t ipv6

4. java测试使用db文件

cd ../../binding/java

1)编写测试代码(主类)TestSearch.java,并放到当前路径下的src/main/java/org/lionsoul/ip2region/下

package org.lionsoul.ip2region;

import org.lionsoul.ip2region.exception.IpFormatException;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class TestSearcher1 {
    public static void main(String[] args) {
        if (args.length < 1) {
            System.out.println("Usage: java TestSearcher1 <database_file>");
            return;
        }

        String dbFile = args[0];

        try {
            DbSearcher1 searcherIP = new DbSearcher1(dbFile, QueryType.MEMORY);
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

            while (true) {
                System.out.println("<<<<<< Enter an IP address to search (or type 'exit' to quit):");
                String inputIP = reader.readLine().trim();

                if (inputIP.equalsIgnoreCase("exit")) {
                    break;
                } else {
                    String region = searcherIP.search(inputIP);
                    System.out.println("IP: " + inputIP + " is located in: " + region);
                }
            }

            searcherIP.close();
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (IpFormatException e) {
            System.out.println("Invalid IP address format. Please try again.");
        }
    }
}

2)修改Dbsearch.java代码实现自动识别地址类型、指定db文件并查询

  • 修改initMemoryOrBinaryModeParam函数,注释下面内容
dbType = (bytes[0] & 1) == 0 ? DbType.IPV4 : DbType.IPV6;
  • 修改search函数为下面内容
public String search(String ip) throws IpFormatException, IOException {
        byte[] ipBytes = getIpBytes(ip);
        DataBlock dataBlock = null;
        
        switch (dbType) {
            case IPV4:
                switch (queryType) {
                    case MEMORY:
                        dataBlock = memorySearch(ipBytes);
                        break;
                    case BINARY:
                        dataBlock = binarySearch(ipBytes);
                        break;
                    case BTREE:
                        dataBlock = bTreeSearch(ipBytes);
                        break;
                    default:
                        break;
                }
                break;
                
            case IPV6:
                dataBlock = memorySearch(ipBytes);
                break;
        }

        if (dataBlock == null) {
            return null;
        } else {
            return dataBlock.getRegion();
        }
    }
  • 修改getIpBytes函数为下面内容
private byte[] getIpBytes(String ip) throws IpFormatException {
        byte[] ipBytes;
        if (IPAddressUtil.isIPv6LiteralAddress(ip)) {
            ipBytes = IPAddressUtil.textToNumericFormatV6(ip);
            dbType = DbType.IPV6;
        } else if (IPAddressUtil.isIPv4LiteralAddress(ip)) {
            ipBytes = IPAddressUtil.textToNumericFormatV4(ip);
            dbType = DbType.IPV4;
        } else {
            throw new IpFormatException("Invalid IP address format: " + ip);
        }
        
        return ipBytes;
    }

3)修改pom.xml

 <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-shade-plugin</artifactId>
     <version>1.4</version>
     <executions>
         <execution>
             <phase>package</phase>
             <goals>
                 <goal>shade</goal>
             </goals>
             <configuration>
                 <transformers>
                     <transformer
                             implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                         <mainClass>org.lionsoul.ip2region.TestSearcher</mainClass>
                     </transformer>
                 </transformers>
             </configuration>
         </execution>
     </executions>
 </plugin>

3)编译执行

mvn package -Dmaven.test.skip=true
java -jar target/ip2region-search-1.0-SNAPSHOT.jar ../../maker/java/ipv6.db

在这里插入图片描述

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值