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