/geoip-rs

geoip service written in rust https://geoip.rs/

Primary LanguageRustApache License 2.0Apache-2.0

geoip-rs

Latest version Build Status

geoip-rs is a geoip service: it provides geographical information about the calling or the specified IP address. It supports both IPV4 and IPV6.

Example response

Valid ip address:

{
  "ip_address": "46.51.179.90",
  "latitude": 53.3331,
  "longitude": -6.2489,
  "postal_code": "D02",
  "continent_code": "EU",
  "continent_name": "Europe",
  "country_code": "IE",
  "country_name": "Ireland",
  "region_code": "L",
  "region_name": "Leinster",
  "province_code": "",
  "province_name": "",
  "city_name": "Dublin",
  "timezone": "Europe/Dublin"
}

Not found (private) ip address:

{
  "ip_address": "127.0.0.1"
}

Speed

On an 8 cores Intel i7, geoip.rs can serve ~30K requests/sec.

Dataset

geoip-rs uses the free dataset provided by maxmind. It's not bundled: you have to download it separately.

Download "GeoLite2 City" dataset in binary format from here and unzip it.

Running

Install geoip.rs with

cargo install geoip-rs

If you don't have cargo, install it with

curl https://sh.rustup.rs -sSf | sh

or read the tutorial for additional instructions.

You can specify the dataset location on the command line

geoip-rs /path/to/GeoLite2-City.mmdb

or via environment variable

export GEOIP_RS_DB_PATH=/path/to/GeoLite2-City.mmdb
geoip-rs

or via .env

cp .env.template .env
#edit .env appropriately
geoip-rs

You can also customize the host and port geoip.rs will listen to

export GEOIP_RS_DB_PATH=/path/to/GeoLite2-City.mmdb
export GEOIP_RS_HOST=192.168.0.1
export GEOIP_RS_PORT=8080
geoip-rs

or you can copy .env.template to .env and customize its contents

Arabic country names

to return unsupported localiazed country name in country_name in the response you need to create a JSON file contains the localized country names as the following example:

{
  "ar":{
    "AE": "الامارات العربية المتحدة",
          .
          .
          .
  }
}

then set the path to the file in .env file

GEOIP_RS_COUNTRY_NAMES_AR=data/countries.json

Now when you pass ?lang=ar it will return the arabic value

License

This project is licensed under the Apache License, Version 2.0