当前位置: 首页 > article >正文

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

目录

    • 一、IP 地址查询能获取哪些信息
      • 1.地理位置信息
      • 2.网络信息
      • 3.网络类型
    • 二、IP 地址查询方法,附代码
      • 1.在线查询 IP 地址方法
      • 2.使用 API 进行 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 和 IPv6IPv4 和 IPv6IPv4 和 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

image-20241102110141396

请求说明:

image-20241102110155715请求方法(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());
}

输出说明:

image-20241102110225519

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

在需要大规模查询或高效访问时,可以考虑使用本地缓存或 IP 离线库。这种方式可以在本地处理查询请求,减少对外部 API 的依赖
首先获取 IP 离线库【https://www.ipdatacloud.com/?utm-source=kol&utm-keyword=?2752】,以下是查询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());         // 时区
    }
}

http://www.kler.cn/a/379127.html

相关文章:

  • 1565412310
  • 【Centos】在 CentOS 9 上使用 Apache 搭建 PHP 8 教程
  • 40.第二阶段x86游戏实战2-初识lua
  • 实体(Entity)详解
  • 使用DJL和PaddlePaddle的口罩检测详细指南
  • WebStorm技巧
  • Spring Boot 配置文件详解与最佳实践
  • WPF怎么通过RestSharp向后端发请求
  • [ 问题解决篇 ] 解决windows虚拟机安装vmtools报错-winserver2012安装vmtools及安装KB2919355补丁 (附离线工具)
  • uni-app发起请求以及请求封装,上传及下载功能(六)
  • 【Android 系统中使用CallStack类来追踪获取和操作调用栈信息】
  • ubuntu编译内核安装启动
  • 大学适合学C语言还是Python?
  • 【AI日记】24.11.03 熟悉Hugging Face和开源大模型选择
  • 几款非常出色的可视化工具,帮助你轻松地构建和运行 AI 模型
  • Python 列表的下标索引
  • 如何下载安装TestLink?
  • openpnp - 在openpnp中单独测试相机
  • Spring Boot在校园社团信息管理中的实践与思考
  • linux桌面通知
  • Dify 中的 Bearer Token 与 API-Key 鉴权方式
  • 【postman】工具下载安装
  • UOS 安装usb wifi 网卡驱动
  • GBase与梧桐数据库数据加载与导出的差异
  • gin框架可以构建微服务吗?
  • ip报文头解析