Я посмотрел и посмотрел, и я не вижу, чтобы найти C ++ версию GeoIP. Я знаю, что есть версия этого в C, но я не могу заставить его работать с Micosoft Visual Studio 2012 C ++
Я пытался:
Так,
Извините за все вопросы, но я посмотрел и посмотрел, и я не могу найти решение.
GeoIP — это онлайн-база данных, которая обновляет свои данные ежедневно (или ежемесячно!).
Кроме того, у вас может быть большая автономная база данных для сопоставления IP-местоположения рядом с вашим приложением (и вам необходимо периодически обновлять ее).
GeoIP не привязан к конкретному языку программирования, вы можете подключиться к этой базе данных, используя веб-сервис механизм. Просто подключитесь к онлайн-сервису по TCP / HTTP-запросу и получите данные.
HTTP API требует, чтобы вы передавали набор параметров как HTTP GET
или ПОСТ. Результаты возвращаются в простом текстовом формате.
ниже.Мы предлагаем несколько разных услуг, каждая из которых предоставляет разную сумму
информации об IP-адресе.
Поздно, но я недавно написал C ++ API для MaxBind GeoIP db. Я не тестировал его под Windows, я только запускал его под Linux, но он определенно не специфичен для Linux.
Я назвал это GeoLite2 ++. Вы можете найти это здесь: https://www.ccoderun.ca/GeoLite2++/api/
Исходные файлы tarball и .deb для Ubuntu находятся здесь: 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