如何用Python和IP离线库查询IP归属地?获取国家、城市、经纬度的完整代码

简介: 支持IPv4/IPv6,微秒级响应(0.05–0.1ms),单机QPS超250万,零网络依赖、数据内网闭环。Python SDK三分钟快速集成,适用于运维排障、日志分析与内网审计等高并发、强安全场景。(239字)

运维排查线上问题时,拿到一个IP后最常做的事情就是查归属地:这个IP是国内还是国外、哪个城市、哪个运营商。直接调用在线API虽然方便,但在内网环境、高并发场景或批量日志分析中往往行不通,不是网络不通,就是被限流卡住。下面直接上代码,三分钟跑通。
18.jpg

一、IP离线库的工作原理(一分钟讲透)

IP离线库的核心是把IP段和地理信息的映射关系预先存储成二进制文件,查询时直接在内存中做二分查找,完全不依赖网络

传统的在线API每次查询都要走一次HTTP请求,公网往返加服务端处理,单次耗时通常在30-80ms,高峰期甚至超200ms。而离线库把数据文件加载到本地内存后,查询本质是纯CPU运算,单次耗时仅0.05-0.1ms。数据格式方面,.mmdb是行业标准格式,专为IP查询设计,底层基于二叉树结构,查询复杂度O(log n)。

二、四步搞定:Python + IP离线库代码实现

18..PNG

流程图:Python导入SDK、加载离线库、调用查询、获取归属地和经纬度字段

2.1 下载离线库文件

从IP数据云官网获取ip_data_cloud.mmdb文件(支持IPv4和IPv6,大小约数百MB),下载后放到服务器的固定目录(如/data/ipdb/)。

2.2 安装官方SDK

pip install ipdatacloud

2.3 编写查询代码(可运行)

import ipdatacloud
import time

# 加载离线库(应用启动时执行一次,常驻内存)
db = ipdatacloud.OfflineIPLib('/data/ipdb/ip_data_cloud.mmdb', enable_risk=True)

def get_ip_geo(ip: str) -> dict:
    """获取IP的国家、城市、经纬度等信息"""
    start = time.time()
    info = db.query(ip)
    elapsed_ms = (time.time() - start) * 1000

    return {
        'ip': ip,
        'country': info.get('country'),
        'province': info.get('province'),
        'city': info.get('city'),
        'isp': info.get('isp'),
        'usage_type': info.get('usage_type'),
        'risk_score': info.get('risk_score'),
        'latitude': info.get('latitude'),
        'longitude': info.get('longitude'),
        'latency_ms': round(elapsed_ms, 2)
    }

# 测试
if __name__ == '__main__':
    test_ip = '203.0.113.45'
    result = get_ip_geo(test_ip)
    print(f"{result['ip']} | {result['country']} {result['province']} {result['city']}")
    print(f"运营商: {result['isp']} | 网络类型: {result['usage_type']} | 风险分: {result['risk_score']}")
    print(f"经纬度: {result['latitude']},{result['longitude']} | 耗时: {result['latency_ms']}ms")

2.4 批量查询优化(处理海量IP时使用)

def batch_query(ip_list: list) -> list:
    """批量查询IP,内存映射方式,查询完全本地化"""

    results = [ ]

    for ip in ip_list:
        info = db.query(ip)
        results.append({
            'ip': ip,
            'country': info.get('country'),
            'city': info.get('city'),
            'latitude': info.get('latitude'),
            'longitude': info.get('longitude')
        })
    return results

# 测试
test_ips = ['203.0.113.45', '114.114.114.114', '8.8.8.8']
for r in batch_query(test_ips):
    print(f"{r['ip']} -> {r['country']} {r['city']} ({r['latitude']},{r['longitude']})")

以上会将数据库文件加载到内存,查询完全在本地完成,不产生任何网络流量。实测单线程可轻松达到每秒数万次查询,多进程共享同一份内存页还能进一步提升吞吐。

三、性能对比:离线库 vs 在线API

维度 在线API 离线库
平均响应时间 30-80ms 0.05-0.1ms
单机QPS 受API限流(约1000) 250万+
网络依赖 必须外网 零依赖,内网可用
数据安全 IP外发第三方 内网闭环
批量任务 受频率限制 只受CPU限制
成本模式 按次计费 一次性采购

四、使用场景

  • 运维排障:查询可疑IP的归属地、运营商、风险状态,快速判断是否为代理或数据中心节点。
  • 内网审计:分析访问日志中的IP,批量解析归属地信息,导出报表审计。
  • 日志分析:结合Spark、ClickHouse等大数据平台,批量处理TB级IP日志。
    18...PNG

五、总结

在运维工作中,IP归属地查询是一个高频但容易被忽视的基础能力。用在线API固然简单,但在内网环境、高并发或批量任务中处处受制。把IP查询从“网络调用”变成“本地计算”,才是解决这类问题的根本思路。Python集成的IP数据云离线库方案,从数据下载到代码跑通不超过10分钟,单次查询延迟稳定在0.1毫秒以内,无论是运维排障时的临时查询,还是业务系统的高并发调用,都能轻松应对。

相关文章
|
搜索推荐 定位技术
百度地图开发mapStyle个性化地图styleJson的配色解决方案
百度地图开发mapStyle个性化地图styleJson的配色解决方案
990 0
|
7月前
|
数据采集 人工智能 供应链
2025年适合汽车行业与互联网企业的BI产品选型指南
2025年,数字化转型加速,BI工具成企业决策核心。本文对比瓴羊Quick BI、Power BI、Tableau、永洪科技、Domo五大主流产品,从能力、行业适配、案例等维度解析,重点推荐阿里云旗下瓴羊Quick BI,其在汽车与互联网行业表现突出,兼具AI分析、高性能计算与信创合规优势,助力企业实现数据价值最大化。
|
2月前
|
监控 网络协议 测试技术
如何制定IP地址风控规则?误判排查与策略清单
本文剖析IP风控误判困局:吉林监管警示银行“误伤”,上海警方破获IP池黑产。指出IP仅宜作环境信号,非身份凭证。详解拦截/加验/限流/评分四类规则,提供误判排查清单与阈值设定方法,助风控团队科学升级IP策略。
如何制定IP地址风控规则?误判排查与策略清单
|
2月前
|
缓存 监控 网络协议
通过IP地址查询判断网络风险,有哪些具体指标和判断方法?
本文详解IP风险评估三大核心维度:基础属性(如net_type、地理位置)、行为特征(频率、IP段聚集性)与历史信誉(risk_score、threat_tags),结合离线库毫秒查询与动态阈值策略,提供可落地的分级风控方案,有效识别代理、秒拨及云主机恶意流量。
通过IP地址查询判断网络风险,有哪些具体指标和判断方法?
|
3月前
|
Windows
Notepad++ 8.8安装教程 Windows版:详细步骤+安装路径修改
Notepad是Windows自带的纯文本编辑器,自1985年沿用至今。本文详解Notepad++ 8.8安装教程:下载压缩包→解压→以管理员身份运行Setup.exe→按向导完成安装(可选改路径、建桌面快捷方式),一分钟快速部署,即刻享受更强大的代码与文本编辑体验。(239字)
|
安全 编译器 API
为什么会有 GIL?如何释放 GIL 实现并行?
为什么会有 GIL?如何释放 GIL 实现并行?
505 1
|
SQL 分布式计算 数据可视化
基于Hadoop的大数据可视化方法
【8月更文第28天】在大数据时代,有效地处理和分析海量数据对于企业来说至关重要。Hadoop作为一个强大的分布式数据处理框架,能够处理PB级别的数据量。然而,仅仅完成数据处理还不够,还需要将这些数据转化为易于理解的信息,这就是数据可视化的重要性所在。本文将详细介绍如何使用Hadoop处理后的数据进行有效的可视化分析,并会涉及一些流行的可视化工具如Tableau、Qlik等。
627 0
|
存储 Kubernetes 监控
K8s技术全景:架构、应用与优化
K8s技术全景:架构、应用与优化
1290 0
|
存储 算法 NoSQL
常见限流算法及其实现
在分布式系统中,随着业务量的增长,如何保护核心资源、防止系统过载、保证系统的稳定性成为了一个重要的问题。限流算法作为一种有效的流量控制手段,被广泛应用于各类系统中。本文将详细介绍四种常见的限流算法、两种常用的限流器工具,从原理、源码的角度进行分析。
1844 0
|
开发框架 移动开发 Dart
Flutter vs React Native:选择最适合的跨平台移动应用开发框架
本文探讨了Flutter和React Native这两个流行的跨平台移动应用开发框架之间的对比。首先,介绍了Flutter和React Native的基本原理和特点,并强调了它们在性能、开发体验和生态系统方面的优势。然后,通过对比性能、开发体验和生态系统等方面的差异,帮助读者更好地了解两者之间的区别。最后,总结了每个框架的优缺点,并提供了选择适合自身需求框架的建议。无论是开发者还是决策者,本文都将为他们在选择Flutter或React Native时提供一些有价值的指导。