整合 ip2region

使用 ip2region 在 Java 中进行 IP 地理位置查询

本文将介绍如何使用 ip2region 库在 Java 应用中进行 IP 地址查询。ip2region 库提供了一种快速准确的方式来确定 IP 地址的地理位置。我们将一步步介绍如何设置库、配置它以及使用它来获取 IP 地址信息。

前提条件

在开始之前,确保你具备以下条件:

  • Java 开发环境(JDK 8 或以上)
  • Maven 作为项目管理工具

依赖添加

首先,在你的 Maven 项目的 pom.xml 文件中添加 ip2region 依赖:

<!-- https://mvnrepository.com/artifact/org.lionsoul/ip2region -->
<dependency>
  <groupId>org.lionsoul</groupId>
  <artifactId>ip2region</artifactId>
  <version>2.7.0</version>
</dependency>

下载 IP 数据库

接下来,从 ip2region GitHub 仓库open in new window 下载 IP 数据库文件,并将其存放在 src/main/resources/ipdb/ip2region.xdb 路径下。

封装单例,枚举工具类

我们将创建一个单例工具类 Ip2RegionUtils 来简化 IP 查询的使用。以下是该工具类的代码:

import java.io.IOException;
import java.net.URL;

import org.lionsoul.ip2region.xdb.Searcher;

import com.litongjava.tio.utils.hutool.FileUtil;
import com.litongjava.tio.utils.hutool.ResourceUtil;

public enum Ip2RegionUtils {
  INSTANCE;

  private static Searcher searcher;
  static {
    URL resource = ResourceUtil.getResource("ipdb/ip2region.xdb");
    if (resource != null) {
      byte[] bytes = FileUtil.readUrlAsBytes(resource);
      try {
        searcher = Searcher.newWithBuffer(bytes);
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }

  public static String searchIp(long ip) {
    if (searcher != null) {
      try {
        return searcher.search(ip);
      } catch (IOException e) {
        throw new RuntimeException(e);
      }
    }
    return null;
  }

  public static String searchIp(String ip) {
    if (searcher != null) {
      try {
        return searcher.search(ip);
      } catch (Exception e) {
        throw new RuntimeException(e);
      }
    }
    return null;
  }
}

测试工具类

接下来,我们将编写一个测试类来验证我们的工具类是否正常工作:

import org.junit.Test;

public class Ip2RegionUtilsTest {

  @Test
  public void test() {
    // 数据格式: 国家|区域|省份|城市|ISP
    String searchIpInfo = Ip2RegionUtils.searchIp("192.168.1.1");
    System.out.println(searchIpInfo);

    searchIpInfo = Ip2RegionUtils.searchIp("76.76.21.21");
    System.out.println(searchIpInfo);
  }
}

输出结果

运行测试类后,你应该会看到类似如下的输出:

0|0|0|内网IP|内网IP
美国|0|北卡罗来纳|夏洛特|0

小结

通过上述步骤,我们成功地在 Java 项目中集成了 ip2region 库,并使用它进行 IP 地址的地理位置查询。ip2region 库提供了高效的 IP 查询能力,非常适合需要快速定位 IP 的应用场景。希望这篇文章能对你有所帮助,如果有任何问题或建议,欢迎留言讨论。