使用 API 和离线库查询 IP 地址方法详解

目录

    • [一、IP 地址查询能获取哪些信息](#一、IP 地址查询能获取哪些信息)
    • [二、IP 地址查询方法,附代码](#二、IP 地址查询方法,附代码)
      • [1.在线查询 IP 地址方法](#1.在线查询 IP 地址方法)
      • [2.使用 API 进行 IP 地址查询](#2.使用 API 进行 IP 地址查询)
      • [3.使用离线库进行 IP 地址查询](#3.使用离线库进行 IP 地址查询)

互联网监管部门要求公开 IP 归属地,引起了很大热度,但作为平台或企业的开发者不能只凑个热闹,使用 IP 地址查询尤为重要。

IP 地址是实现网络互通的条件之一,通过查询 IP 地址,可获取地理位置、时区、经纬度、运营商等信息,为金融、电商、广告、网安行业提供流量分析、网络安全等技术支持。因为 IP 数据云查询的数据维度多,定位精准,所以下面以它为例,教大家如何进行 IP 地址查询。

一、IP 地址查询能获取哪些信息

1.地理位置信息

  • 国家:IP 所属的国家或地区。
  • 城市:IP 所在的城市或省份信息。
  • 区县或街道:用高精准定位的产品,可以定位到街道
  • 经纬度:IP 地址大致对应的地理坐标。

2.网络信息

  • 互联网服务提供商(ISP):提供该 IP 地址的网络服务商。
  • 自治系统编号(ASN):分配给 IP 地址段的自治系统编号,标识网络的运营商。

3.网络类型

  • 数据中心 IP:区分 IP 是否属于家庭用户、商业用户或数据中心。
  • 代理、Tor 节点:识别 IP 地址是否使用了虚拟专用网络、代理服务或 Tor 匿名网络。

开发者或企业可以根据业务需求,使用 IP 归属地、IP 应用场景、IP 风险画像产品等产品,或数据定制。

二、IP 地址查询方法,附代码

个人少量查询可选择在线查询,对企业或平台,需要大量的 IP 地址查询,建议使用 API 或离线库查询方式。

在线 IP 查询 API 查询 离线库查询
更新频率 实时更新 实时更新 依赖于数据库更新频率,可选择日更、周更、月更等
批量查询 不能批量查询 支持大规模批量查询,取决于 API 服务的配额和限制 支持大规模批量查询,查询速度受限于本地硬件
网络 完全依赖网络,需要持续的网络连接 需要网络连接,API 调用需要访问外部服务器 不依赖网络,本地查询,不受网络状态影响
支持 IP 类型 IPv4 和 IPv6 IPv4 和 IPv6 IPv4 和 IPv6
响应速度 受网络延迟和服务器负载影响 取决于 API 响应速度和网络状况 查询在本地进行,无网络延迟
操作复杂度 简单,适合非技术人员使用 需要一定开发集成和配置,但可自动化 需要下载、部署数据库文件和编写查询脚本
适用场景 少量查询、个人或临时使用 批量查询、企业级应用、广告验证、用户分析等场景 大规模数据处理、网络优化、流量调度等场景

1.在线查询 IP 地址方法

查询地址:https://www.ip66.net/?utm-source=kol\&utm-keyword=?2753

直接输入 IP 地址,根据套餐返回相应的结果,每日可免费查询

2.使用 API 进行 IP 地址查询

https://www.ipdatacloud.com/?utm-source=kol\&utm-keyword=?2752】

首先根据需求购买数据后,获取 api 接口的 key

接口地址:https://api.ipdatacloud.com

请求说明:

请求方法(java 示例代码):

java 复制代码
public static void main(String[] args) throws IOException, InterruptedException {
    String urlArr = "https://api.ipdatacloud.com/v2/query?ip=&key=";
    HttpClient httpClient = HttpClient.newBuilder().build();
    HttpRequest getRequest = HttpRequest.newBuilder()
            .GET()
            .uri(URI.create(urlArr))
            .build();

    // 发送GET请求并获取响应
    HttpResponse<String> resp = httpClient.send(getRequest, HttpResponse.BodyHandlers.ofString());

    //对返回的json数据做解析
    ObjectMapper objectMapper = new ObjectMapper();
    JsonNode rootNode = objectMapper.readTree(resp.body());
    String data = rootNode.get("data").get("location").asText();
    Location location = objectMapper.readValue(data, Location.class);
    System.out.println(location.toString());
}

输出说明:

3.使用离线库进行 IP 地址查询

在需要大规模查询或高效访问时,可以考虑使用本地缓存或 IP 离线库。这种方式可以在本地处理查询请求,减少对外部 API 的依赖

首先获取 IP 离线库【https://www.ipdatacloud.com/?utm-source=kol\&utm-keyword=?2752】,以下是查询java代码示例(内存版):

java 复制代码
package com.ipdatacloud.search;import java.io.IOException;
public class Test {
    public static void main(String[] args) throws IOException {
        /*
          getInstanceFileIpv4() ipv4文件版查询
          getInstanceFileIpv6() ipv6文件版查询
          getInstanceMemIpv4() ipv4内存版查询
          getInstanceMemIpv6() ipv6内存版查询
         */
        // 1.实例化查询类
        Search finder = Search.getInstanceMemIpv4("file_path");

        // 2.执行查询
        String res = finder.get("ip_address");

        // 3.解析查询结果
        Location location = new Location(res);
        System.out.println(location.getContinent());        // 大洲
        System.out.println(location.getCountry());          // 国家
        System.out.println(location.getProvince());         // 省份
        System.out.println(location.getCity());             // 城市
        System.out.println(location.getDistrict());         // 区县
        System.out.println(location.getIsp());              // 运营商
        System.out.println(location.getAreaCode());         // 区域代码
        System.out.println(location.getCountryEnglish());   // 国家/地区英文
        System.out.println(location.getCountryCode());      // 国家/地区英文简写
        System.out.println(location.getLongitude());        // 经度
        System.out.println(location.getLatitude());         // 纬度
        System.out.println(location.getElevation());        // 海拔
        System.out.println(location.getZipCode());          // 邮编
        System.out.println(location.getCityCode());         // 城市代码
        System.out.println(location.getWeatherStation());   // 气象站
        System.out.println(location.getAsn());              // ASN码
        System.out.println(location.getPreserve());         // 预留
        System.out.println(location.getStreet());           // 街道
        System.out.println(location.getTimeZone());         // 时区
    }
}
相关推荐
Jackilina_Stone14 分钟前
【Linux】网络相关的命令
网络·ubuntu·ip
Tony聊跨境1 天前
代理IP地址和端口是什么?怎么进行设置?
tcp/ip·ip
OkeyProxy1 天前
怎麼解除IP阻止和封禁?
ip·ip地址·isp·代理服务器·海外ip代理
IPFoxy6662 天前
一台手机可以登录运营多少个TikTok账号?
ip
UestcXiye2 天前
《TCP/IP网络编程》学习笔记 | Chapter 2:套接字类型与协议设置
网络·c++·ip·tcp
Tony聊跨境3 天前
一台手机可以登录运营多少个TikTok账号?
ip
UestcXiye4 天前
《TCP/IP网络编程》学习笔记 | Chapter 1:理解网络编程和套接字
c++·网络编程·ip·tcp
xiaoxiongip6665 天前
网络爬虫的定义
网络·爬虫·网络协议·tcp/ip·http·ip