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++ - LoadLibrary() 实际上链接到库吗?

我可以在 C++ 中使用 cython 编译的动态库吗?

我可以在 C 程序中使用 C++ 库吗?

任何人都知道将图像划分为任意形状的 C++ 或 Python 库吗?

我可以在 Visual Studio 2008 中使用 Visual Studio 6 编译的 C++ 静态库吗?

在 linux 中编译/链接多个 c++ 库