This is an unofficial library for reading MaxMind GeoIP databases as a DLL library. It provides a simple and easy-to-use interface for reading MaxMind GeoIP databases in your applications. You can use it in your Delphi, C#, C++ and other programming languages projects. The library is provided in 2 types for Windows x86 and x64 and databases for tests.
Import data:
- PathDB - string, the path to your database. It must be absolute.
- IP - string, IP to search for data. Example: 8.8.8.8 Export functions:
GetASN: function (PathDB, IP: WideString): WideString; safecall;
GetCountry: function (PathDB, IP: WideString): WideString; safecall;
GetCity: function (PathDB, IP: WideString): WideString; safecall;
Delphi
procedure TForm1.Button1Click(Sender: TObject);
var DLLHandle: THandle;
PWC : array[0..255] of WideChar;
PluginName: string;
GetASN: function (PathDB, IP: WideString): WideString; safecall;
GetCountry: function (PathDB, IP: WideString): WideString; safecall;
GetCity: function (PathDB, IP: WideString): WideString; safecall;
begin
PluginName := ExtractFilePath(Application.ExeName) + 'MaxMindDBReader.dll';
StringToWideChar(PluginName, PWC, PluginName.Length+1);
DLLHandle := LoadLibrary(PWC);
if DLLHandle = 0 then
raise Exception.Create('The library could not be connected!');
try
@GetCity := GetProcAddress(DLLHandle, 'GetCity');
Self.Memo1.Lines.Text := GetCity(ExtractFilePath(ParamStr(0)) + '/IpGeo2/GeoLite2-City.mmdb', '8.8.8.8');
finally
FreeLibrary(DLLHandle);
end;
end;
C++
#include <windows.h>
#include <string>
#include <iostream>
typedef std::wstring (*GetCityFunc)(std::wstring, std::wstring);
int main() {
HMODULE dllHandle = LoadLibrary(L"MaxMindDBReader.dll");
if (dllHandle == NULL) {
std::cerr << "The library could not be connected!" << std::endl;
return 1;
}
GetCityFunc getCity = reinterpret_cast<GetCityFunc>(GetProcAddress(dllHandle, "GetCity"));
if (getCity == NULL) {
std::cerr << "The function could not be found!" << std::endl;
FreeLibrary(dllHandle);
return 1;
}
std::wstring city = getCity(L"IpGeo2/GeoLite2-City.mmdb", L"8.8.8.8");
std::wcout << city << std::endl;
FreeLibrary(dllHandle);
return 0;
}
C#
using System;
using System.Runtime.InteropServices;
public delegate string GetCityDelegate(string pathDB, string ip);
public class Program
{
[DllImport("MaxMindDBReader.dll", CharSet = CharSet.Unicode)]
public static extern GetCityDelegate GetCity;
public static void Main()
{
string city = GetCity("IpGeo2/GeoLite2-City.mmdb", "8.8.8.8");
Console.WriteLine(city);
}
}
GetASN:
{
"Network": "8.8.8.8",
"AutonomousSystemNumber": "15169",
"AutonomousSystemOrganization": "GOOGLE"
}
GetCountry:
{
"Network": "8.8.8.8",
"ContinentCode": "NA",
"ContinentGeonameId": "6255149",
"CountryISOCode": "US",
"CountryGeonameId": "6252001",
"RegisteredCountryISOCode": "US",
"RegisteredCountryGeonameId": "6252001"
}
GetCity:
{
"Network": "8.8.8.8",
"ContinentCode": "NA",
"CountryISOCode": "US",
"CountryGeonameId": "6252001",
"RegisteredCountryISOCode": "US",
"RegisteredCountryGeonameId": "6252001",
"CityGeonameId": "0",
"LocationAccuracy": "1000",
"LocationTimeZone": "America/Chicago",
"PostalCode": ""
}
If an error occurs:
{
"error": "Not found"
}
- Telegram: @tnAnGel
- Email: [email protected]
BTC: bc1q4s290l8042am3qewkjmqllylh43kfgf7vjqwhn