使用 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());         // 时区
    }
}
相关推荐
2401_873479402 天前
爬虫IP怎么防?IP离线库四层识别+日志留存,反爬留证两不误
爬虫·网络协议·tcp/ip·ip
ShineWinsu3 天前
对于Linux:UDPsocket编程基础的解析
linux·运维·网络协议·udp·ip·端口号·进程间通信
艺杯羹4 天前
网络安全攻防演进:从单人砸门到AI博弈的五次战争
人工智能·安全·web安全·ddos·ip·ip欺骗
2401_873479406 天前
批量IP归属地查询用什么工具?在线API vs 本地离线库,批量场景实测对比
java·网络·数据库·tcp/ip·ip
IpdataCloud8 天前
跨区服玩家延迟高怎么办?用IP离线库自动分配到最近服务器
数据库·tcp/ip·github·php·ip
2401_873479408 天前
金融合规新规下IP查询怎么做?用IP离线库实现数据不出域
网络协议·tcp/ip·金融·ip
IpdataCloud8 天前
担心IP暴露隐私?用安全IP查询工具自查,三步配置网络出口
网络·tcp/ip·安全·ip
IpdataCloud10 天前
跨境AI金融风险怎么防?IP风险画像的实战应用指南
数据库·tcp/ip·金融·ip
2401_8734794012 天前
如何识别代理IP和伪装流量?用IP情报工具三步穿透住宅代理伪装
网络·数据库·网络协议·tcp/ip·ip
IpdataCloud13 天前
AI生成的Avalon恶意框架怎么防?用IP离线库识别模块化C2通信
运维·人工智能·网络协议·tcp/ip·ip