1、介绍

通过Java程序实现IP地址归属地查询,基于纯真IP库(czdb-search)

纯真(https://cz88.net/)自2005年起一直为广大社区用户提供社区版IP地址库,只要获得纯真的授权就能免费使用,并不断获取后续更新的版本。如果有需要免费版IP库的朋友可以前往纯真的官网进行申请。
纯真除了免费的社区版IP库外,还提供数据更加准确、服务更加周全的商业版IP地址查询数据。纯真围绕IP地址,基于 网络空间拓扑测绘 + 移动位置大数据 方案,对IP地址定位、IP网络风险、IP使用场景、IP网络类型、秒拨侦测、VPN侦测、代理侦测、爬虫侦测、真人度等均有近20年丰富的数据沉淀。

2、添加Maven依赖

在pom.xml中添加依赖(最新版本为1.0.2.10):

<dependency>
    <groupId>net.cz88</groupId>
    <artifactId>czdb-search</artifactId>
    <version>1.0.2.10</version>
</dependency>

3、准备数据库文件

  • 访问www.cz88.net下载数据库文件(如ip.db)
  • 获取数据库对应的密钥(通常随数据库提供)

4、Java核心实现代码

import net.cz88.czdb.DbSearcher;
import net.cz88.czdb.enums.QueryType;

import java.io.File;

public class IpQueryService {
    private final DbSearcher searcher;

    /**
     * 初始化IP查询器
     * @param dbPath 数据库文件路径
     * @param queryType 查询类型(MEMORY或BTREE)
     * @param key 数据库密钥
     */
    public IpQueryService(String dbPath, QueryType queryType, String key) throws Exception {
        this.searcher = new DbSearcher(dbPath, queryType, key);
    }

    /**
     * 查询IP地址归属地
     * @param ip 要查询的IP地址
     * @return 归属地信息(格式:国家–省份–城市–区域 ISP)
     */
    public String queryIp(String ip) {
        return searcher.search(ip);
    }

    /**
     * 关闭数据库连接
     */
    public void close() {
        if (searcher != null) {
            searcher.close();
        }
    }

    public static void main(String[] args) {
        // 配置参数(替换为实际值)
        String dbPath = "data/ip.db";
        String key = "your_database_key"; // 替换为实际密钥
        QueryType queryType = QueryType.MEMORY; // 推荐使用MEMORY模式

        try (IpQueryService ipService = new IpQueryService(dbPath, queryType, key)) {
            // 示例查询
            String[] testIps = {"114.114.114.114", "2408:4002:10c1:8f0:3eaa::1"};
            
            for (String ip : testIps) {
                String region = ipService.queryIp(ip);
                System.out.println("IP: " + ip);
                System.out.println("归属地: " + (region != null ? region : "未查询到结果"));
                System.out.println("------------------------");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

5、关键配置说明

  • 将数据库文件(如ip.db)放在项目目录下(示例中路径为data/ip.db)
  • 查询模式选择:
QueryType.MEMORY    // 线程安全,适合高并发(推荐)
QueryType.BTREE     // 非线程安全,需为每个线程创建独立实例
  • 成功查询返回:国家–省份–城市–区域 ISP(例:中国–上海–上海–浦东新区 电信)。查询失败返回null
posted on 2025-08-13 11:29  骑着蜗牛望太阳  阅读(90)  评论(0)    收藏  举报