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

发布于:2024-12-18 ⋅ 阅读:(43) ⋅ 点赞:(0)

目录

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

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

1、地理位置信息

2、网络信息

3、网络类型

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

1、在线查询IP地址方法

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

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

四、总结


作者: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示例代码):

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代码示例(内存版):

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

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

        其他热门文章,请关注:

        极致的灵活度满足工程美学:用Vue Flow绘制一个完美流程图

        你真的会使用Vue3的onMounted钩子函数吗?Vue3中onMounted的用法详解

        通过array.filter()实现数组的数据筛选、数据清洗和链式调用

        通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能

        通过MongoDB Atlas 实现语义搜索与 RAG——迈向AI的搜索机制

        TreeSize:免费的磁盘清理与管理神器,解决C盘爆满的燃眉之急

        el-table实现动态数据的实时排序,一篇文章讲清楚elementui的表格排序功能

        深入理解 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解

        MutationObserver详解+案例——深入理解 JavaScript 中的 MutationObserver

        Dockerfile全面指南:从基础到进阶,掌握容器化构建的核心工具

        在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境

        干货含源码!如何用Java后端操作Docker(命令行篇)


网站公告

今日签到

点亮在社区的每一天
去签到