【GitHub精选项目】IP 地址转地理位置:ip2region 完全指南

这篇具有很好参考价值的文章主要介绍了【GitHub精选项目】IP 地址转地理位置:ip2region 完全指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【GitHub精选项目】IP 地址转地理位置:ip2region 完全指南,GitHub 精选优质项目⭐⭐,github,tcp/ip,网络协议

前言

本文为大家带来的是 lionsoul2014 开发的 ip2region 项目,一种高效的离线 IP 地址定位库。ip2region 提供了10微秒级别的查询效率,支持多种主流编程语言,是一种理想的 IP 定位解决方案。

这个开源项目可以实现 IP 地址到地理位置的精确映射,包括国家、省份、城市、运营商等信息,对于需要地理定位功能的应用程序来说,它是非常有用的。
别的不说,最近在项目中就运用上了它!!!

项目地址:https://github.com/lionsoul2014/ip2region


项目概览

ip2region 是一个跨语言的 IP 定位库,它提供了一个紧凑、高效的数据结构来存储 IP 定位数据,并且支持快速查询。这使得 ip2region 在需要快速准确获取 IP 地址地理位置信息的场合中,如网络分析、广告定向、内容定制等领域,显得尤为重要。

【GitHub精选项目】IP 地址转地理位置:ip2region 完全指南,GitHub 精选优质项目⭐⭐,github,tcp/ip,网络协议

可以看到项目支持多种编程语言去查询。

【GitHub精选项目】IP 地址转地理位置:ip2region 完全指南,GitHub 精选优质项目⭐⭐,github,tcp/ip,网络协议

克隆项目

git clone

最简单的,在命令行工具数据以下命令即可,如下图所示:

git clone https://github.com/lionsoul2014/ip2region.git

【GitHub精选项目】IP 地址转地理位置:ip2region 完全指南,GitHub 精选优质项目⭐⭐,github,tcp/ip,网络协议

Download ZIP

当然,使用 Download ZIP 也是个不错的下载方式。

【GitHub精选项目】IP 地址转地理位置:ip2region 完全指南,GitHub 精选优质项目⭐⭐,github,tcp/ip,网络协议

使用指南

为了展示 ip2region 的使用方法,下面将使用 Python 语言进行演示。Python 版本的 ip2region 使用方法可以在下面的链接中找到:
Python 文档:https://github.com/lionsoul2014/ip2region/tree/master/binding/python

我们将通过一个实例演示如何将大量 IP 地址转换为地理位置信息,并将结果保存为 Excel 文件,以便于测试它的速度有多快。


我准备了一份 19万+ 的 IP 用于测试。

【GitHub精选项目】IP 地址转地理位置:ip2region 完全指南,GitHub 精选优质项目⭐⭐,github,tcp/ip,网络协议


实现代码

以下使用代码来自官方的 Python 文档,但

  • 我添加了一个计时器的装饰器
  • 从 CSV 文件中读取 IP 地址。
  • 将查询结果保存为 Excel 文件。
# -*- coding: utf-8 -*-
# @Author : Frica01
# @Time   : 2023-12-20 22:32
# @Name   : demo.py

import time
from collections import defaultdict

import pandas as pd

from binding.python.xdbSearcher import XdbSearcher

output_dict = defaultdict(list)


def timer(func):
    """任务计时装饰器,用于测量函数执行时间"""

    def wrapper(*args, **kwargs):
        start_time = time.time()  # 开始时间
        result = func(*args, **kwargs)  # 执行函数
        end_time = time.time()  # 结束时间
        print(f"{func.__name__}任务执行耗时 {end_time - start_time:.4f} 秒.")
        return result

    return wrapper


@timer
def searchWithFile():
	"""完全基于文件的查询"""
    # 1. 创建查询对象
    dbPath = "./data/ip2region.xdb"
    searcher = XdbSearcher(dbfile=dbPath)

    # 2. 执行查询
    df = pd.read_csv('test_ip.csv')
    for idx, item in df.iterrows():
        ip = item['ip']
        output_dict['ip'].append(ip)
        output_dict['region'].append(searcher.searchByIPStr(ip))

    # 3. 关闭searcher
    searcher.close()

    # 4. 保存为excel文件
    pd.DataFrame(data=output_dict).to_excel('result.xlsx', index=False)


@timer
def searchWithVectorIndex():
	"""缓存 VectorIndex 索引"""
    # 1. 预先加载整个 xdb
    dbPath = "./data/ip2region.xdb"
    vi = XdbSearcher.loadVectorIndexFromFile(dbfile=dbPath)

    # 2. 使用上面的缓存创建查询对象, 同时也要加载 xdb 文件
    searcher = XdbSearcher(dbfile=dbPath, vectorIndex=vi)

    # 3. 执行查询
    df = pd.read_csv('test_ip.csv')
    for idx, item in df.iterrows():
        ip = item['ip']
        output_dict['ip'].append(ip)
        output_dict['region'].append(searcher.search(ip))

    # 4. 关闭searcher
    searcher.close()

    # 5. 保存为excel文件
    pd.DataFrame(data=output_dict).to_excel('result.xlsx', index=False)


@timer
def searchWithContent():
	"""缓存整个 xdb 数据"""
    # 1. 预先加载整个 xdb
    dbPath = "./data/ip2region.xdb"
    cb = XdbSearcher.loadContentFromFile(dbfile=dbPath)

    # 2. 仅需要使用上面的全文件缓存创建查询对象, 不需要传源 xdb 文件
    searcher = XdbSearcher(contentBuff=cb)

    # 3. 执行查询
    df = pd.read_csv('test_ip.csv')
    for idx, item in df.iterrows():
        ip = item['ip']
        output_dict['ip'].append(ip)
        output_dict['region'].append(searcher.search(ip))

    # 4. 关闭searcher
    searcher.close()

    # 5. 保存为excel文件
    pd.DataFrame(data=output_dict).to_excel('result.xlsx', index=False)


if __name__ == '__main__':
    searchWithFile()
    # searchWithVectorIndex()
    # searchWithContent()

测试

不同模式的执行速度如下表所示:

  • 它们分别转换了 19万+IP ,并将结果保存为 excel 文件。
模式 耗时/秒 速度
完全基于文件的查询 10.2
缓存 VectorIndex 索引 9.6 ⭐⭐
缓存整个 xdb 数据 6.0 ⭐⭐⭐

影响速度的原因

在项目 README.md 的末尾,有关于 VectorIndexxdb 等原理的介绍,有需要的读者可以进一步查阅。

VectorIndexxdb 文件是 ip2region 项目中用于存储 IP 地址数据和加速查询的关键组件:

  • 索引效率VectorIndex 提供了一种高效的查找方法,减少了查询时需要扫描的数据量。这种优化的索引方法可以快速定位到数据库中的特定区域,从而加快查询速度。
  • xdb数据访问方式:当数据直接从内存中读取时,查询速度要快于从硬盘读取。因此,将整个 xdb 文件加载到内存中可以显著提高查询速度。

总的来说,通过使用高效的索引(如 VectorIndex)和将数据加载到内存中,ip2region 能够实现快速、准确的 IP 定位查询,这对于处理大量 IP 地址查询尤其重要。


总结

本文详细介绍了 ip2region 项目,这是一个高效的离线 IP 地址定位库,能够将 IP 地址映射到地理位置。通过对项目的细致解读,本文提供了关于如何使用 ip2region 的全面指南,特别是针对 Python 用户。

文章的重点在于演示如何使用不同的查询模式(完全基于文件的查询、缓存 VectorIndex 索引、缓存整个 xdb 数据)来处理大量的 IP 地址,并比较了这些方法在性能上的差异。通过这些实验,我们能够清楚地看到不同方法对于查询速度的影响,这对于选择合适的查询策略是非常有帮助的。

后话

本次分享到此结束,
see you~~🎈🎈文章来源地址https://www.toymoban.com/news/detail-764650.html

到了这里,关于【GitHub精选项目】IP 地址转地理位置:ip2region 完全指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 通过ip获取地理位置信息

    GeoLite2-City.mmdb 文件是 MaxMind 公司提供的一个免费的 IP 地址与城市地理位置映射数据库文件。它包含了 IP 地址范围与对应的城市、地区、国家、经纬度等地理位置信息的映射。这种数据库文件可以用于识别访问您的应用程序或网站的用户的地理位置,从而实现针对不同地区的

    2024年02月12日
    浏览(44)
  • 微信小程序如何获取地理位置、地图显示,逆地址解析。

    微信严格了获取客户位置的要求,需要申请地理位置权限和声明。 自 2022 年 7 月 14 日后发布的小程序,若使用地理位置接口,需要在 app.json 中进行声明。 申请时需要选择适合的小程序类目、填写需要调用接口的理由和小程序图片或视频(可以弄点儿UI设计的图稿放进去,显示

    2024年02月07日
    浏览(51)
  • Golang — 根据IP获取地理位置信息

    1 ip2region 2 geoip2-golang ip2region 是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现。 特点: 是一个开源的IP地理位置库。 标准化的数据格式 每个 ip 数据段的 region 信息都固定了格式:国家|区域|省

    2024年02月14日
    浏览(42)
  • 分享几个IP获取地理位置的API

    一、请求接口(GET): https://ip.taobao.com/outGetIpInfo?ip=IP地址accessKey=alibaba-inc 二、返回数据格式: 三、频次限制: 每个用户的访问频率需小于1qps 四、文档说明: http://ip.taobao.com/instructions.html 五、代码片段: 一 、请求接口(GET): http://freeapi.ipip.net/ip地址字串 二、返回数据

    2024年02月03日
    浏览(42)
  • IP详细地理位置查询:技术原理与应用实践

    IP地址是互联网上设备的唯一标识,在网络安全、个性化服务等领域具有重要意义。通过IP详细地理位置查询,可以获取到IP地址所在地的具体信息,为网络管理、定位服务等提供支持。IP数据云将深入探讨IP详细地理位置查询的技术原理、应用实践以及相关的隐私安全考虑,以

    2024年02月21日
    浏览(48)
  • (Java版)根据ip获取地理位置以及相关信息

    1.首先我们需要进入地图开放平台的官网,根据提示注册账号,以百度地图为例: https://lbsyun.baidu.com/ 我们新用户登录之后会弹出这个页面,选择个人爱好者进入完成注册 成功之后我们会进入到下面这个页面,如果没有申请ak的小伙伴在控制台看板这一块是有一个流程指引的

    2024年02月08日
    浏览(36)
  • Nginx通过用户IP获取所在国家及地理位置

    Nginx是一款高性能、轻量级的Web服务器和反向代理服务器。它最初设计目的是为了解决C10k问题,即如何支持10,000个以上的并发连接。Nginx采用了事件驱动的异步非阻塞模型,可以在消耗较少的系统资源下处理更多的并发连接。由于其高性能和可靠性,Nginx逐渐成为了现代Web架构

    2024年02月09日
    浏览(46)
  • 利用Spring Boot实现客户端IP地理位置获取

    在当今互联的世界中,了解客户端的地理位置对于提供个性化服务和增强用户体验至关重要。无论是根据地区偏好定制内容,还是确保符合本地法规,访问客户端IP位置都是一项宝贵的资产。如抖音评论区、用户页都会展示用户的IP属地信息。 在本文中,我们将探讨一个Spri

    2024年02月20日
    浏览(56)
  • uniapp使用高德地图地理位置逆解析/将获取到的经纬度转化为地址

    1、在高德登录注册,进行个人或企业开发者认证(个人开发者可以随时升级企业开发者) 高德地图开发aip网址 2、进入控制台,按以下图示操作 添加完成之后把key复制一下。 3、使用uni.request进行请求(用什么框架就这么请求,这里示例的是uniapp),请求地址为:https://rest

    2024年02月08日
    浏览(48)
  • 微信小程序通过startLocationUpdate,onLocationChange获取当前地理位置信息,配合腾讯地图解析获取到地址

    先创建个getLocation.js文件 在App.vue文件里引入封装的getLocation.js文件 要在manifest.json文件里配置下内容

    2024年02月03日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包