4

我看了又看,找不到C++版本的GeoIP。我知道它在 C 中有一个版本,但我似乎无法让它与 Micosoft Visual Studio 2012 C++ 一起使用

我努力了:

所以,

  1. GeoIPC++ 版本是否存在?
  2. 是否有另一个库可以像 C++ 中的 GeoIP 一样对国家/地区进行 IP 处理?
  3. 是否有关于如何让 GeoIP 与 C++ 一起使用的教程?

抱歉所有问题,但我看了又看,似乎找不到解决方案。

4

2 回答 2

3

迟到了,但我最近为 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

于 2016-11-10T02:51:25.907 回答
2

GeoIP 是一个在线数据库,每天(或每月!)更新其数据。

此外,您可以拥有一个大型离线数据库来将 IP 映射到您的应用程序旁边的位置(并且您需要定期更新它)。

GeoIP 不绑定到特定的编程语言,您可以使用Web 服务机制连接到该数据库。只需通过 TCP/HTTP 请求连接到在线服务并检索数据。

HTTP API 要求您将一组参数作为 HTTP GET 或 POST 传递。结果以下面记录的简单文本格式返回。

我们提供多种不同的服务,每种服务都提供不同数量的 IP 地址信息。

于 2013-03-26T07:56:52.247 回答