我看了看,我看不到找到GeoIP的C ++版本。我知道它有一个版本的C,但我似乎无法使用Micosoft Visual Studio 2012 C ++
我试过了:
所以,
很抱歉所有的问题,但我看了看,我似乎无法找到解决方案。
答案 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