GeoIP for C ++有一个lib吗?

时间:2013-03-26 07:47:47

标签: c++ ip country geoip maxmind

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

我试过了:

所以,

  1. 是否存在GeoIPC ++版本?
  2. 在C ++中是否还有另一个用于向国家/地区提供IP的库?
  3. 是否有关于如何让GeoIP使用C ++的教程?
  4. 很抱歉所有的问题,但我看了看,我似乎无法找到解决方案。

2 个答案:

答案 0 :(得分:2)

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

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

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

  

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

     

我们提供多种不同的服务,每种服务提供不同的金额   有关IP地址的信息。

答案 1 :(得分:2)

晚会,但我最近为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