项目发布
geoip 0.1.0 项目已发布首个版本。该项目实现了一个通过 REST API 获取 IP 地址地理位置信息的服务。其目标是简化 GeoIP 功能在各种应用程序中的集成,使开发人员无需自行管理数据库更新和处理 MMDB 格式。代码使用 Rust 语言编写,以 MIT 许可证分发。支持在 Linux、macOS 及其他类 UNIX 系统上运行。
主要功能
- 高性能与低内存占用:得益于使用编译为机器码且无垃圾回收器的语言。
- 全面的地理位置信息:通过 REST API 提供 IP 地址信息(国家、城市、邮政编码、坐标、网络运营商等),数据基于 MaxMind GeoLite2(免费)和 MaxMind GeoIP2(付费)。
- 便捷的端点设计:
- 可获取请求用户的当前 IP 地址(通过独立端点实现;主端点的
ip参数为可选)。 - 支持通过可选 API 密钥保护端点。
- 可获取请求用户的当前 IP 地址(通过独立端点实现;主端点的
- 灵活的数据库更新:
- 可配置的自动数据库更新(可从使用 Account ID 和 Licence Key 的 MaxMind 官方资源更新,也可从支持身份验证的自定义 URL 更新;可指定更新检查间隔)。
- 支持通过 HTTP 直接从服务获取最新的数据库存档(允许将一个实例用作其他实例的代理源,从而减少 MaxMind 配额消耗)。
- 独特的时区功能:
- 为所有包含
timezone字段的结果自动生成额外的posix_timezone字段(例如,将Europe/Paris转换为CET-1CEST,M3.5.0,M10.5.0/3)。这确保了在嵌入式设备(如 ESP32 及其他没有内置 tzdata 的 newlib 目标)上自动配置时区。此功能是同类解决方案中所不具备的。 - 自动更新时区数据库(可配置间隔、来源和身份验证;默认使用 IANA 官方网站)。若禁用更新,则使用系统数据库。
- 为所有包含
- 开发者友好工具:
- 提供用于手动发送请求的 Web 界面,包括可选的 OpenStreetMap 地图显示。
- 提供 OpenAPI 规范和内置的 Swagger UI,便于与自有项目集成。
- 快速部署:提供现成的 Docker 镜像以便快速部署。
Docker 部署示例
|
|
相关讨论摘要
发布新闻后,用户社区围绕技术细节、数据源和应用场景展开了讨论:
-
技术实现与数据源:
- 有用户询问技术细节,特别是仅需 CIDR 和国家信息的实现方式。
- 讨论指出 MaxMind 是流行选择,但其免费和付费数据库对某些地区(如俄罗斯)的支持有限。提到了替代数据源,如
ip-location-db、ipapi.is以及俄罗斯联邦通信、信息技术和大众传媒监督局 (RKN) 分发的 MaxMind 格式数据库。 - 关于 RKN 数据库来源的讨论,推测可能来自 Yandex 或自行收集,并指出所有 GeoIP 数据库都存在不准确之处(如 IP 归属地与注册地不符)。最佳的收集方式被认为需要像大型搜索引擎那样拥有海量用户数据。
-
项目性质与隐私:
- 有评论将此类开源项目与“监视”关联,但被其他用户反驳,指出开源项目本身并不意味着用于监视。
-
实际应用场景:
- 针对“VPN 时代是否需要 GeoIP”的疑问,讨论指出并非所有用户都使用 VPN,且 GeoIP 在地区性软件分发、内容分段等方面仍有实际用途。
- 有用户提出了关于在代理服务器后方运行、信任特定 HTTP 头(如
X-Real-IP)以获取真实客户端 IP 的功能需求,并与现有解决方案(如echoip)进行了对比。
-
网络环境差异:
- 讨论了不同地区 ISP 在分配公网 IPv4/IPv6 地址策略上的差异,反映了全球网络基础设施的不均衡性。