C++ 的 GeoIP 有这个库吗?
Posted
技术标签:
【中文标题】C++ 的 GeoIP 有这个库吗?【英文标题】:GeoIP for C++ is there a lib for this? 【发布时间】:2013-03-15 22:36:05 【问题描述】:我看了又看,找不到 C++ 版本的 GeoIP。我知道它有一个 C 版本,但我似乎无法让它与 Micosoft Visual Studio 2012 C++ 一起使用
我试过了:
Compile Maxmind C library with visual studio 2010 http://dev.maxmind.com/geoip/所以,
-
是否存在 GeoIPC++ 版本?
是否有另一个库可以像 C++ 中的 GeoIP 一样对国家/地区进行 IP 处理?
是否有关于如何让 GeoIP 使用 C++ 的教程?
抱歉所有问题,但我看了又看,似乎找不到解决方案。
【问题讨论】:
【参考方案1】:迟到了,但我最近为 MaxMind GeoIP db 编写了一个 C++ API。我没有在 Windows 下测试它,我只是在 Linux 下运行它,但它绝对不是 Linux 特定的。
我称之为 GeoLite2++。你可以在这里找到它:https://www.ccoderun.ca/GeoLite2++/api/
适用于 Ubuntu 的源 tarball 和 .deb 文件在这里:https://www.ccoderun.ca/GeoLite2PP/download/?C=M;O=D
示例源代码:
#include <GeoLite2PP.hpp>
...
GeoLite2PP::DB db( "/opt/stuff/GeoLite2-City.mmdb" );
std::string json = db.lookup( "216.58.216.163" );
std::cout << json << std::endl;
示例输出:
"city" :
"names" :
"de" : "Mountain View",
"en" : "Mountain View",
...
它包括更多内容,例如获取单个字段而不是获取整个记录作为 JSON 字符串。
展示如何抓取单个字段的示例:
GeoLite2PP::DB db("GeoLite2-City.mmdb");
std::string city = db.get_field( "65.44.217.6", "en",
GeoLite2PP::VCStr "city", "names" );
这里描述了中心类:https://www.ccoderun.ca/GeoLite2++/api/classGeoLite2PP_1_1DB.html
【讨论】:
嗨,Stéphane,派对迟到,C/C++ 领域的新手。 C++ 包中是否有一个示例,说明如何在没有完整专业级相互依赖脚本的情况下在单个(ish)命令中从 main 编译?我看到未定义的参考错误。如果这是一个更合适的问题,请提出建议,我将发布完整的代码示例。 ccoderun.ca/GeoLite2++/api/usage.html 是我写的文档。如果您在链接时遇到问题,我猜您忘记添加库了?搜索没有实际函数名的缺失依赖问题,看看人们对此有何看法。【参考方案2】:GeoIP 是一个在线数据库,每天(或每月!)更新其数据。
此外,您可以拥有一个大型离线数据库来将 IP 映射到应用程序旁边的位置(并且您需要定期更新)。
GeoIP 不绑定到特定的编程语言,您可以使用web-service 机制连接到此数据库。只需通过 TCP/HTTP 请求连接到在线服务并检索数据。
HTTP API 要求您将一组参数作为 HTTP GET 传递 或发布。结果以记录的简单文本格式返回 下面。
我们提供多种不同的服务,每种服务提供不同的金额 有关 IP 地址的信息。
【讨论】:
感谢您的回答,是的,如果可能的话,我想在 c++ 中连接到他们的离线数据库或可以在 c++ 中工作的固定 c 版本:)。 是的,你可以。阅读this 和this。以上是关于C++ 的 GeoIP 有这个库吗?的主要内容,如果未能解决你的问题,请参考以下文章
任何人都知道将图像划分为任意形状的 C++ 或 Python 库吗?