前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >追踪数字足迹:通过API和离线库查询IP地址的解决方案(详解带源码)

追踪数字足迹:通过API和离线库查询IP地址的解决方案(详解带源码)

作者头像
watermelo37
发布2025-01-22 21:27:26
发布2025-01-22 21:27:26
19800
代码可运行
举报
文章被收录于专栏:前端专精前端专精
运行总次数:0
代码可运行

作者:watermelo37 涉及领域:Vue、SpingBoot、Docker、LLM、python等 --------------------------------------------------------------------- 温柔地对待温柔的人,包容的三观就是最大的温柔。 ---------------------------------------------------------------------

追踪数字足迹:通过API和离线库查询IP地址的解决方案(详解带源码)

互联网监管部门要求公开IP归属地,引起了很大热度,这对于我们开发者来说意味着什么呢?最起码我们应该熟悉如何运用在线工具和接口进行IP地址查询。

IP地址是实现网络互通的条件之一,通过查询IP地址,可获取地理位置、时区、经纬度、运营商等信息,为金融、电商、广告、网安行业提供流量分析、网络安全等技术支持。对于个人,也能通过查询域名对应的ip地址,修改host文件从而实现对部分网站的顺利访问(比如github.com)。本文从在线查询、通过API查询和离线库查询三种方式分享如何进行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.ipdatacloud.com/?utm-source=LMN&utm-keyword=?2841

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

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

参照上述查询地址,进入主页。

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

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

请求说明:

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

代码语言:javascript
代码运行次数:0
运行
复制
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());

    }

输出说明:

三、使用离线库进行IP地址查询

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

首先获取IP离线库:https://www.ipdatacloud.com/?utm-source=LMN&utm-keyword=?2841

以下是查询java代码示例(内存版):

代码语言:javascript
代码运行次数:0
运行
复制
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());         // 时区
    }
}

四、总结

综上所述,在线查询适合个人和小规模查询,API查询适合需要大量查询的企业级应用,而离线库查询则适用于对查询速度和网络依赖性有特定要求的场景。每种方法都有其适用的场景和限制,选择合适的查询方式可以显著提高数据处理效率和准确性。总而言之,本文提供的查询方法数据维度多,定位精准,能满足各种领域的应用需求。

只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 追踪数字足迹:通过API和离线库查询IP地址的解决方案(详解带源码)
    • 一、IP地址查询能获取哪些信息
      • 1、地理位置信息
      • 2、网络信息
      • 3、网络类型
    • 二、IP地址查询方法,附代码
      • 1、在线查询IP地址方法
      • 2、使用API进行IP地址查询
    • 三、使用离线库进行IP地址查询
    • 四、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档