IP转地址

370 阅读1分钟

IP转地址

原文链接:IP转地址 | 柳门竹巷 (zhbblog.top)

官方链接:

参考文章:

简介

ip2region v2.0 - 是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现。每个 ip 数据段的 region 信息都固定了格式:国家|区域|省份|城市|ISP(网络服务提供商)

使用

获取离线包

从网站上获取ip2region离线包,并将ip2region.xdb放在resource目录下

获取离线包

导入依赖

<!-- ip2region依赖(必须) -->
<dependency>
    <groupId>org.lionsoul</groupId>
    <artifactId>ip2region</artifactId>
    <version>2.6.5</version>
</dependency>

<!-- hutool依赖(非必须) -->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.4</version>
</dependency>

简单使用

import cn.hutool.core.io.resource.ResourceUtil;
import org.lionsoul.ip2region.xdb.Searcher;

public class Main {
    public static void main(String[] args) {
        // 使用hutool的ResourceUtil从resource目录下读取ip2region.xdb文件
        byte[] bytes = ResourceUtil.readBytes("ip2region.xdb");
        try {
            // 创建一个完全基于内存的查询对象
            Searcher searcher = Searcher.newWithBuffer(bytes);
            // 查询ip,返回值:国家|区域|省份|城市|ISP(网络服务提供商)
            System.out.println(searcher.search("1.2.3.4"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
// 控制台打印:
// 美国|0|华盛顿|0|谷歌

工具类封装

import cn.hutool.core.io.resource.ResourceUtil;
import lombok.SneakyThrows;
import org.springframework.stereotype.Component;
import org.lionsoul.ip2region.xdb.Searcher;
import javax.annotation.PostConstruct;

@Component
public final class IpUtils {

    /**
     * 一个完全基于内存的查询对象
     */
    private static Searcher searcher;

    /**
     * 默认返回值
     */
    private static final String UNKNOWN_ADDRESS = "UNKNOWN";

    /**
     * 初始化
     */
    @PostConstruct
    public static void init() {
        try {
            searcher = Searcher.newWithBuffer(ResourceUtil.readBytes("ip2region.xdb"));
        } catch (Exception e) {
            throw new RuntimeException("failed to create content cached searcher", e);
        }
    }
    
    /**
     * IP转地址
     * @param ip ip
     * @return 地址
     */
    public static String ipToAddress(String ip) {
        try {
            return searcher.search(ip);
        } catch (Exception e) {
            return UNKNOWN_ADDRESS;
        }
    }
}