{"id":22296758,"url":"https://github.com/webklex/gogeoip","last_synced_at":"2026-03-07T17:33:04.161Z","repository":{"id":71427905,"uuid":"234628413","full_name":"Webklex/gogeoip","owner":"Webklex","description":"GoGeoIP - a lightweight web api providing ip intelligence written in GO. This software provides an api to get as many information as possible for a given IP address or the current visitor. This includes network, system, location and user information.","archived":false,"fork":false,"pushed_at":"2022-09-01T00:24:26.000Z","size":553,"stargazers_count":23,"open_issues_count":0,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-05T05:51:12.814Z","etag":null,"topics":["api","geoip","geoip2","go","golang"],"latest_commit_sha":null,"homepage":"https://www.gogeoip.com/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Webklex.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-01-17T20:13:51.000Z","updated_at":"2025-01-26T17:21:58.000Z","dependencies_parsed_at":"2023-02-25T18:30:47.940Z","dependency_job_id":null,"html_url":"https://github.com/Webklex/gogeoip","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/Webklex/gogeoip","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Webklex%2Fgogeoip","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Webklex%2Fgogeoip/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Webklex%2Fgogeoip/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Webklex%2Fgogeoip/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Webklex","download_url":"https://codeload.github.com/Webklex/gogeoip/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Webklex%2Fgogeoip/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267616581,"owners_count":24116154,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-28T02:00:09.689Z","response_time":68,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","geoip","geoip2","go","golang"],"created_at":"2024-12-03T17:47:29.985Z","updated_at":"2026-03-07T17:33:04.104Z","avatar_url":"https://github.com/Webklex.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GoGeoIP Web API\nGoGeoIP - a lightweight web api providing ip intelligence written in GO. This software provides an api to get as many \ninformation as possible for a given IP address or the current visitor. This includes network, system, location and \nuser information. \nA [Live Demo](https://www.gogeoip.com/) is available under [gogeoip.com](https://www.gogeoip.com/).\n\n[![Releases][ico-release]](https://github.com/Webklex/gogeoip/releases)\n[![Downloads][ico-downloads]](https://github.com/Webklex/gogeoip/releases)\n[![Demo][ico-website-status]](https://www.gogeoip.com/)\n[![License][ico-license]](LICENSE.md)\n[![Hits][ico-hits]][link-hits]\n\n\n\n![geo_ip_web_gui](https://raw.githubusercontent.com/webklex/gogeoip-gui/master/geo_ip_web_gui.jpg)\n\n## Table of Contents\n- [Features](#features)\n- [Installation](#installation)\n  - [GUI](#gui)\n- [Configuration](#server-options)\n  - [HTTP \u0026 HTTPS](#http--https)\n  - [Letsencrypt](#letsencrypt)\n  - [Middlewares \u0026 Extensions](#middlewares--extensions)\n  - [Rate limiting \u0026 Quota management](#rate-limiting--quota-management)\n  - [MaxMind](#maxmind)\n  - [ip2location](#ip2location)\n  - [Tor Project](#tor-project)\n  - [Logging](#logging)\n  - [Memcache](#memcache)\n  - [Redis](#redis)\n  - [Additional](#additional)\n- [Database](#database)\n- [Api](#api)\n  - [Output](#output)\n    - [CSV](#csv)\n    - [XML](#xml)\n    - [JSON](#json)\n    - [JSONP](#jsonp)\n- [Build](#build)\n- [Support](#support)\n- [Security](#security)\n- [Credits](#credits)\n- [License](#license)\n\n### Features\n* Serving over HTTPS (TLS) using your own certificates, or provisioned automatically using [LetsEncrypt.org](https://letsencrypt.org)\n* [HSTS ready](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) to restrict your browser clients to always use HTTPS\n* Configurable read and write timeouts to avoid stale clients consuming server resources\n* Reverse proxy ready\n* Configurable [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) to restrict access to specific domains\n* Configurable api prefix to serve the API alongside other APIs on the same host\n* Optional round trip optimization by enabling [TCP Fast Open](https://en.wikipedia.org/wiki/TCP_Fast_Open)\n* Integrated rate limit (quota) for your clients (per client IP) based on requests per time interval; several backends such as in-memory map (for single instance), or redis or memcache for distributed deployments are supported\n* Serve the default [GeoLite2 City](https://dev.maxmind.com/geoip/geoip2/geolite2/) free database that is downloaded and updated automatically in background on a configurable schedule, or\n* Serve the commercial [GeoIP2 City](https://www.maxmind.com/en/geoip2-city) database from MaxMind, either as a local file that you provide and update periodically (so the server can reload it), or configured to be downloaded periodically using your API key\n* Serve the default [PX8LITEBIN](https://lite.ip2location.com/database) free database that is downloaded and updated automatically in background on a configurable schedule, or\n* Serve the commercial [PX8BIN](https://lite.ip2location.com/database) database from ip2location, either as a local file that you provide and update periodically (so the server can reload it), or configured to be downloaded periodically using your API token\n* Multiple languages are supported (en, ru, es, jp, fr, de)\n* Detect VPN anonymizer, open proxies, web proxies, Tor exits, data center, web hosting (DCH) range and search engine robots (SES).\n* Supports Linux, OS X, FreeBSD, and Windows\n* Setup wizard\n\n### Requirements\nA Free MaxMind and / or ip2location License will be required and can be easily obtained:\n1. [Sign up for a MaxMind account](https://www.maxmind.com/en/geolite2/signup) (no purchase required)\n2. Set your password and [create a license key](https://www.maxmind.com/en/accounts/current/license-key)\n3. [Sign up for a IP2Location account](https://lite.ip2location.com/sign-up) (no purchase required)\n4. [Create access token](https://lite.ip2location.com/file-download)\n\n### Installation\nDownload and unpack a fitting [pre-compiled binary](https://github.com/webklex/gogeoip/releases) or build a binary \nyourself by by following the [build](#build) instructions.\n\nContinue by configuring your application:\n```bash\ngeoip \\\n    -mm-user-id 100000 \\\n    -mm-license-key 0AAaAaaAa0A0AAaA \\\n    -i2l-token 0BBbBbbBb0B0BBbB \\\n    -http=:8080 \\\n    -gui gui \\\n    -save\n```\n\nOpen a browser and navigate to `http://localhost:8080/` to verify everything is working.\n\nPlease take a look at the available [options](#server-options) for further details.\n\n#### GUI\nAn example GUI can be found under [webklex/gogeoip-gui](https://github.com/Webklex/gogeoip-gui). It is already included \nin the pre-compiled packages found under [releases](https://github.com/webklex/gogeoip/releases).\n\n### Server Options\nTo see all the available options, use the `-help` option:\n```bash\ngeoip -help\n```\nYou can configure the web server via command line flags, the config file `conf/settings.config` or by using the `-setup` flag:\n```bash\ngeoip -setup\n```\n\n#### HTTP \u0026 HTTPS\n| CLI                    | Config               | Type   | Default              | Description                                                 |\n| :--------------------- | :------------------- | :----- | :------------------- | :---------------------------------------------------------- |\n| -http                  | HTTP                 | string | localhost:8080       | Address in form of ip:port to listen                        |\n| -https                 | HTTPS                | string |                      | Address in form of ip:port to listen                        |\n| -write-timeout         | WRITE_TIMEOUT        | int    | 15000000000          | Write timeout in nanoseconds for HTTP and HTTPS client connections |\n| -read-timeout          | READ_TIMEOUT         | int    | 30000000000          | Read timeout in nanoseconds for HTTP and HTTPS client connections |\n| -tcp-fast-open         | TCP_FAST_OPEN        | bool   | false                | Enable TCP fast open                                        |\n| -tcp-naggle            | TCP_NAGGLE           | bool   | false                | Enable TCP Nagle's algorithm                                |\n| -http2                 | HTTP2                | bool   | true                 | Enable HTTP/2 when TLS is enabled                           |\n| -hsts                  | HSTS                 | string |                      |                                                             |\n| -key                   | KEY                  | string | key.pem              | X.509 key file for HTTPS server                             |\n| -cert                  | CERT                 | string | cert.pem             | X.509 certificate file for HTTPS server                     |\n\n#### Letsencrypt\n| CLI                    | Config               | Type   | Default              | Description                                                 |\n| :--------------------- | :------------------- | :----- | :------------------- | :---------------------------------------------------------- |\n| -letsencrypt           | LETSENCRYPT          | bool   | false                | Enable automatic TLS using letsencrypt.org                  |\n| -letsencrypt-email     | LETSENCRYPT_EMAIL    | string |                      | Optional email to register with letsencrypt                 |\n| -letsencrypt-hosts     | LETSENCRYPT_HOSTS    | string |                      | Comma separated list of hosts for the certificate           |\n| -letsencrypt-cert-dir  | LETSENCRYPT_CERT_DIR | string |                      | Letsencrypt cert dir                                        |\n\n#### Middlewares \u0026 Extensions\n| CLI                    | Config               | Type   | Default              | Description                                                 |\n| :--------------------- | :------------------- | :----- | :------------------- | :---------------------------------------------------------- |\n| -use-x-forwarded-for   | USE_X_FORWARDED_FOR  | bool   | false                | Use the X-Forwarded-For header when available (e.g. behind proxy) |\n| -cors-origin           | CORS_ORIGIN          | string | *                    | Comma separated list of CORS origins endpoints              |\n| -api-prefix            | API_PREFIX           | string | /                    | API endpoint prefix                                         |\n| -gui                   | GUI                  | string |                      | Web gui directory                                           |\n\n##### Rate limiting \u0026 Quota management\n| CLI                    | Config               | Type   | Default              | Description                                                 |\n| :--------------------- | :------------------- | :----- | :------------------- | :---------------------------------------------------------- |\n| -quota-backend         | QUOTA_BACKEND        | string | redis                | Backend for rate limiter: map, redis, or memcache           |\n| -quota-burst           | QUOTA_BURST          | int    | 3                    | Max requests per source IP per request burst                |\n| -quota-interval        | QUOTA_INTERVAL       | int    | 3600000000000        | Quota expiration interval, per source IP querying the API in nanoseconds |\n| -quota-max             | QUOTA_MAX            | int    | 1                    | \"Max requests per source IP per interval; set 0 to turn quotas off |\n\n#### MaxMind\n| CLI                    | Config               | Type   | Default              | Description                                                 |\n| :--------------------- | :------------------- | :----- | :------------------- | :---------------------------------------------------------- |\n| -mm-license-key           | MM_LICENSE_KEY          | string |                      | MaxMind License Key                                         |\n| -mm-user-id               | MM_USER_ID              | string |                      | MaxMind User ID                                             |\n| -mm-product-id            | MM_PRODUCT_ID           | string | GeoLite2-City        | MaxMind Product ID                                          |\n| -mm-retry                 | MM_RETRY_INTERVAL       | int    | 7200000000000        | Max time to wait before retrying to download a MaxMind database |\n| -mm-update                | MM_UPDATE_INTERVAL      | int    | 86400000000000       | MaxMind database update check interval in nanoseconds               |\n| -mm-updates-host          | MM_UPDATES_HOST         | string | download.maxmind.com | MaxMind Updates Host                                        |\n\n#### ip2location\n| CLI                    | Config               | Type   | Default              | Description                                                 |\n| :--------------------- | :------------------- | :----- | :------------------- | :---------------------------------------------------------- |\n| -i2l-token             | I2L_TOKEN            | string |                      | ip2location access token                                         |\n| -i2l-product-id        | I2L_PRODUCT_ID       | string | PX8LITEBIN           | ip2location Product ID                                          |\n| -i2l-retry             | I2L_RETRY_INTERVAL   | int    | 7200000000000        | Max time to wait before retrying to download a ip2location database |\n| -i2l-update            | I2L_UPDATE_INTERVAL  | int    | 86400000000000       | ip2location database update check interval in nanoseconds               |\n| -i2l-updates-host      | I2L_UPDATES_HOST     | string | www.ip2location.com  | ip2location Updates Host                                        |\n\n#### Tor Project\n| CLI                    | Config               | Type   | Default              | Description                                                 |\n| :--------------------- | :------------------- | :----- | :------------------- | :---------------------------------------------------------- |\n| -tor-exit-check        | TOR_EXIT             | string | 8.8.8.8              | MaxMind Product ID                                          |\n| -tor-retry             | TOR_RETRY_INTERVAL   | int    | 7200000000000        | Max time in nanoseconds to wait before retrying to download database |\n| -tor-update            | TOR_UPDATE_INTERVAL  | int    | 86400000000000       | Database update check interval in nanoseconds               |\n| -tor-updates-host      | TOR_UPDATES_HOST     | string | check.torproject.org | MaxMind Updates Host                                        |\n\n#### Logging\n| CLI                    | Config               | Type   | Default              | Description                                                 |\n| :--------------------- | :------------------- | :----- | :------------------- | :---------------------------------------------------------- |\n| -logtostdout           | LOGTOSTDOUT          | bool   | false                | Log to stdout instead of stderr                             |\n| -log-file              | LOG_FILE             | string |                      | Log file location                             |\n| -logtimestamp          | LOGTIMESTAMP         | bool   | true                 | Prefix non-access logs with timestamp                       |\n\n#### Memcache\n| CLI                    | Config               | Type   | Default              | Description                                                 |\n| :--------------------- | :------------------- | :----- | :------------------- | :---------------------------------------------------------- |\n| -memcache              | MEMCACHE             | string | localhost:11211      | Memcache address in form of host:port[,host:port] for quota |\n| -memcache-timeout      | MEMCACHE_TIMEOUT     | int    | 1000000000           | Memcache read/write timeout in nanoseconds                  |\n\n#### Redis\n| CLI                    | Config               | Type   | Default              | Description                                                 |\n| :--------------------- | :------------------- | :----- | :------------------- | :---------------------------------------------------------- |\n| -redis                 | REDIS                | string | localhost:6379       | Redis address in form of host:port[,host:port] for quota    |\n| -redis-timeout         | REDIS_TIMEOUT        | int    | 1000000000           | Redis read/write timeout in nanoseconds                     |\n\n#### Additional\n| CLI                    | Config               | Type   | Default              | Description                                                 |\n| :--------------------- | :------------------- | :----- | :------------------- | :---------------------------------------------------------- |\n| -silent                | SILENT               | bool   | false                | Disable HTTP and HTTPS log request details                  |\n| -config                |                      | string | conf/settings.config | Config file path                                            |\n| -setup                 |                      | bool   | false                | Run the setup wizard                                        |\n| -save                  |                      | bool   | false                | Save config                                                 |\n| -version               |                      | bool   | false                | Show version and exit                                       |\n| -help                  |                      | bool   | false                | Show help and exit                                          |\n\nIf you're using LetsEncrypt.org to provision your TLS certificates, you have to listen for HTTPS on port 443. Following is an example of the server listening on 2 different ports: http (80) and https (443):\n```bash\ngeoip \\\n    -mm-user-id 100000 \\\n    -mm-license-key 0AAaAaaAa0A0AAaA \\\n    -i2l-token 0BBbBbbBb0B0BBbB \\\n    -http=:8080 \\\n    -https=:8443 \\\n    -hsts=max-age=31536000 \\\n    -letsencrypt \\\n    -letsencrypt-hosts=example.com \\\n    -gui gui \\\n    -save\n```\n\n```bash\n$ cat conf/settings.config\n{\n    \"MM_USER_ID\": \"100000\",\n    \"MM_LICENSE_KEY\": \"0AAaAaaAa0A0AAaA\",\n    \"HTTP\": \":8080\",\n    \"HTTPS\": \":8443\",\n    \"HSTS\": \"max-age=31536000\",\n    \"LETSENCRYPT\": true,\n    \"LETSENCRYPT_HOSTS\": \"example.com\",\n    ...\n```\n\nBy default, HTTP/2 is enabled over HTTPS. You can disable by passing the `-http2=false` flag.\n\nIf the web server is running behind a reverse proxy or load balancer, you have to run it passing the `-use-x-forwarded-for` \nparameter and provide the `X-Forwarded-For` HTTP header in all requests. This is for the geoip web server be able to log the \nclient IP, and to perform geolocation lookups when an IP is not provided to the API, e.g. `/json/` (uses client IP) vs `/json/1.2.3.4`.\n\n## Databases\nThe current implementation uses the free [GeoLite2 City](http://dev.maxmind.com/geoip/geoip2/geolite2/) database from \nMaxMind as well as the free [IP2Proxy](https://lite.ip2location.com/database/px8-ip-proxytype-country-region-city-isp-domain-usagetype-asn-lastseen) \ndatabase from ip2location and the generic tor [exit node list](https://check.torproject.org/cgi-bin/TorBulkExitList.py?ip=8.8.8.8) \nprovided by the [TorProject](https://www.torproject.org/).\nIf you have purchased the commercial database from MaxMind or ip2location, you can point the geoip web server or \n(Go API, for dev) to the URL containing the file, or local file, and the server will use it.\nIn case of files on disk, you can replace the file with a newer version and the geoip web server will reload it automatically \nin background. If instead of a file you use a URL (the default), we periodically check the URL in background to see if \nthere's a new database version available, then download the reload it automatically.\n\nAll responses from the geoip API contain the date that the database was downloaded in the X-Database-Date HTTP header.\n\n## API\nThe API is served by endpoints that encode the response in different formats.\nYou can pass a different IP or hostname. For example, to lookup the geolocation of `github.com` the server \nresolves the name first, then uses the first IP address available, which might be IPv4 or IPv6:\n\n```bash\ncurl :8080/json/{ip or hostname}?lang={language}[\u0026user]\n```\nSame semantics are available for the `/xml/{ip}` and `/csv/{ip}` endpoints.\nJSON responses can be encoded as JSONP, by adding the `callback` parameter:\n\nThe used default language depends on the present `Accept-Language` header. You can define the used language by \nproviding a `lang` parameter containing the two digit country code (en, ru, es, fr, de, jp).\n\nAdd the `user` parameter to the end to receive user device specific information. Please see the [JSON example](#json)\nfor output details.\n\n\n### Output\n#### Network\n| Name                  | Value type    | JSON                      | XML                   | CSV   | Comment   |\n| :-------------------- | :------------ | :------------------------ | :-------------------- | :---- | :-------- |\n| IP address            | string        | ip                        | IP                    | 0     |           |\n| Number (ASN)          | integer       | as.number                 | AS.Number             | 1     |           |\n| Organization          | string        | as.name                   | AS.Name               | 2     |           |\n| ISP name              | string        | isp                       | Isp                   | 3     |           |\n| Domain                | string        | domain                    | Domain                | 4     |           |\n| TLDs                  | []string      | tld                       | Tld                   | 5     |           |\n| Is bot                | bool          | bot                       | Bot                   | 6     |           |\n| Is tor user           | bool          | tor                       | Tor                   | 7     |           |\n| Is proxy user         | bool          | proxy                     | Proxy                 | 8     |           |\n| Proxy type            | string        | proxy_type                | ProxyType             | 9     | [Available proxy types](https://lite.ip2location.com/database/px8-ip-proxytype-country-region-city-isp-domain-usagetype-asn-lastseen) |\n| Last seen in days     | integer       | last_seen                 | LastSeen              | 10    |           |\n| Usage type            | string        | usage_type                | UsageType             | 11    | [Available usage types](https://lite.ip2location.com/database/px8-ip-proxytype-country-region-city-isp-domain-usagetype-asn-lastseen) |\n\n#### Location\n| Name                  | Value type    | JSON                      | XML                   | CSV   | Comment   |\n| :-------------------- | :------------ | :------------------------ | :-------------------- | :---- | :-------- |\n| Region code           | string        | region_code               | RegionCode            | 12    |           |\n| Region name           | string        | region_name               | RegionName            | 13    |           |\n| City name             | string        | city                      | City                  | 14    |           |\n| Zip code              | string        | zip_code                  | ZipCode               | 15    |           |\n| Time zone             | string        | time_zone                 | TimeZone              | 16    |           |\n| Latitude              | float         | latitude                  | Latitude              | 17    |           |\n| Longitude             | float         | longitude                 | Longitude             | 18    |           |\n| Accuracy radius       | integer       | accuracy_radius           | AccuracyRadius        | 19    |           |\n| Metro code            | integer       | metro_code                | MetroCode             | 20    |           |\n| Country code              | string        | country.code                  | Country.Code                  | 21    |           |\n| CIOC                      | string        | country.cioc                  | Country.CIOC                  | 22    |           |\n| CCN3                      | string        | country.ccn3                  | Country.CCN3                  | 23    |           |\n| Call codes                | []string      | country.call_code             | Country.CallCode              | 24    |           |\n| International call prefix | string        | country.international_prefix  | Country.InternationalPrefix   | 25    |           |\n| Country capital           | string        | country.capital               | Country.Capital               | 26    |           |\n| Country name              | string        | country.name                  | Country.Name                  | 27    |           |\n| Full country name         | string        | country.full_name             | Country.FullName              | 28    |           |\n| Country Area km²          | integer       | country.area                  | Country.Area                  | 29    |           |\n| Country borders           | []string      | country.borders               | Country.Borders               | 30    |           |\n| Latitude                  | float         | country.latitude              | Country.Latitude              | 31    |           |\n| Longitude                 | float         | country.longitude             | Country.Longitude             | 32    |           |\n| Max. Latitude             | float         | country.max_latitude          | Country.MaxLatitude           | 33    |           |\n| Max. Longitude            | float         | country.max_longitude         | Country.MaxLongitude          | 34    |           |\n| Min. Latitude             | float         | country.min_latitude          | Country.MinLatitude           | 35    |           |\n| Min. Longitude            | float         | country.min_longitude         | Country.MinLongitude          | 36    |           |\n| Currencies                | []{code,name} | country.currency              | Country.Currency              | 37    |           |\n| Continent code            | string        | country.content.code          | Country.Continent.Code        | 38    |           |\n| Continent name            | string        | country.content.name          | Country.Continent.Name        | 39    |           |\n| Continent sub region      | string        | country.content.sub_region    | Country.Continent.SubRegion   | 40    |           |\n\n#### System\n| Name                  | Value type    | JSON          | XML       | CSV   | Comment   |\n| :-------------------- | :------------ | :------------ | :-------- | :---- | :-------- |\n| Operating System      | string        | os            | OS        | 41    |           |\n| System architecture   | string        | os_version    | OSVersion | 42    |           |\n| Browser               | string        | browser       | Browser   | 43    |           |\n| Browser Version       | string        | version       | Version   | 44    |           |\n| Device name           | string        | device        | Device    | 45    |           |\n| Is mobile user        | bool          | mobile        | Mobile    | 46    |           |\n| Is tablet user        | bool          | tablet        | Tablet    | 47    |           |\n| Is desktop user       | bool          | desktop       | Desktop   | 48    |           |\n\n#### User\n| Name                  | Value type    | JSON                 | XML               | CSV   | Comment   |\n| :-------------------- | :------------ | :------------------- | :---------------- | :---- | :-------- |\n| Language              | string        | language.language    | Language.Language | 49    |           |\n| Language region       | string        | language.region      | Language.Region   | 50    |           |\n| Language tag          | string        | language.tag         | Language.Tag      | 51    |           |\n\n#### CSV\n```bash\ncurl :8080/csv/208.13.138.36\n```\n```\n208.13.138.36,209,\"CenturyLink Communications, LLC\",,,.us,0,0,0,,0,,NV,,Las Vegas,839,89129,America/Los_Angeles,-115.2821,36.2473,20,US,USA,840,1,011,Washington D.C.,United States,United States of America,9372610.0000,CAN/MEX,39.4433,-98.9573,71.4411,-66.8854,17.8315,-179.2311,USD/USN/USS,,\n```\n```bash\ncurl :8080/csv/208.13.138.36?user\n```\n```\n208.13.138.36,209,\"CenturyLink Communications, LLC\",,,.us,0,0,0,,0,,NV,,Las Vegas,839,89129,America/Los_Angeles,-115.2821,36.2473,20,US,USA,840,1,011,Washington D.C.,United States,United States of America,9372610.0000,CAN/MEX,39.4433,-98.9573,71.4411,-66.8854,17.8315,-179.2311,USD/USN/USS,,,Linux,Ubuntu Chromium,79.0.3945.79,x86_64,,0,0,1,en,US,en-US\n```\n\n#### XML\n```bash\ncurl :8080/xml/208.13.138.36\n```\n```xml\n\u003cResponse\u003e\n    \u003cNetwork\u003e\n        \u003cIP\u003e208.13.138.36\u003c/IP\u003e\n        \u003cAS\u003e\n            \u003cNumber\u003e209\u003c/Number\u003e\n            \u003cName\u003eCenturyLink Communications, LLC\u003c/Name\u003e\n        \u003c/AS\u003e\n        \u003cIsp/\u003e\n        \u003cDomain/\u003e\n        \u003cTld\u003e.us\u003c/Tld\u003e\n        \u003cBot\u003efalse\u003c/Bot\u003e\n        \u003cTor\u003efalse\u003c/Tor\u003e\n        \u003cProxy\u003efalse\u003c/Proxy\u003e\n        \u003cProxyType/\u003e\n        \u003cLastSeen\u003e0\u003c/LastSeen\u003e\n        \u003cUsageType/\u003e\n    \u003c/Network\u003e\n    \u003cLocation\u003e\n        \u003cRegionCode\u003eNV\u003c/RegionCode\u003e\n        \u003cRegionName/\u003e\n        \u003cCity\u003eLas Vegas\u003c/City\u003e\n        \u003cZipCode\u003e89129\u003c/ZipCode\u003e\n        \u003cTimeZone\u003eAmerica/Los_Angeles\u003c/TimeZone\u003e\n        \u003cLongitude\u003e-115.2821\u003c/Longitude\u003e\n        \u003cLatitude\u003e36.2473\u003c/Latitude\u003e\n        \u003cAccuracyRadius\u003e20\u003c/AccuracyRadius\u003e\n        \u003cMetroCode\u003e839\u003c/MetroCode\u003e\n        \u003cCountry\u003e\n            \u003cCode\u003eUS\u003c/Code\u003e\n            \u003cCIOC\u003eUSA\u003c/CIOC\u003e\n            \u003cCCN3\u003e840\u003c/CCN3\u003e\n            \u003cCallCode\u003e1\u003c/CallCode\u003e\n            \u003cInternationalPrefix\u003e011\u003c/InternationalPrefix\u003e\n            \u003cCapital\u003eWashington D.C.\u003c/Capital\u003e\n            \u003cName\u003eUnited States\u003c/Name\u003e\n            \u003cFullName\u003eUnited States of America\u003c/FullName\u003e\n            \u003cArea\u003e9.37261e+06\u003c/Area\u003e\n            \u003cBorders\u003eCAN\u003c/Borders\u003e\n            \u003cBorders\u003eMEX\u003c/Borders\u003e\n            \u003cLatitude\u003e39.443256\u003c/Latitude\u003e\n            \u003cLongitude\u003e-98.95734\u003c/Longitude\u003e\n            \u003cMaxLatitude\u003e71.441055\u003c/MaxLatitude\u003e\n            \u003cMaxLongitude\u003e-66.885414\u003c/MaxLongitude\u003e\n            \u003cMinLatitude\u003e17.831509\u003c/MinLatitude\u003e\n            \u003cMinLongitude\u003e-179.23108\u003c/MinLongitude\u003e\n            \u003cCurrency\u003e\n                \u003cCode\u003eUSD\u003c/Code\u003e\n                \u003cName/\u003e\n            \u003c/Currency\u003e\n            \u003cCurrency\u003e\n                \u003cCode\u003eUSN\u003c/Code\u003e\n                \u003cName/\u003e\n            \u003c/Currency\u003e\n            \u003cCurrency\u003e\n                \u003cCode\u003eUSS\u003c/Code\u003e\n                \u003cName/\u003e\n            \u003c/Currency\u003e\n            \u003cContinent\u003e\n                \u003cCode/\u003e\n                \u003cName\u003eNorth America\u003c/Name\u003e\n                \u003cSubRegion/\u003e\n            \u003c/Continent\u003e\n        \u003c/Country\u003e\n    \u003c/Location\u003e\n\u003c/Response\u003e\n```\n```bash\ncurl :8080/xml/208.13.138.36?user\n```\n```xml\n\u003cResponse\u003e\n    \u003cNetwork\u003e\n        \u003cIP\u003e208.13.138.36\u003c/IP\u003e\n        \u003cAS\u003e\n            \u003cNumber\u003e209\u003c/Number\u003e\n            \u003cName\u003eCenturyLink Communications, LLC\u003c/Name\u003e\n        \u003c/AS\u003e\n        \u003cIsp/\u003e\n        \u003cDomain/\u003e\n        \u003cTld\u003e.us\u003c/Tld\u003e\n        \u003cBot\u003efalse\u003c/Bot\u003e\n        \u003cTor\u003efalse\u003c/Tor\u003e\n        \u003cProxy\u003efalse\u003c/Proxy\u003e\n        \u003cProxyType/\u003e\n        \u003cLastSeen\u003e0\u003c/LastSeen\u003e\n        \u003cUsageType/\u003e\n    \u003c/Network\u003e\n    \u003cLocation\u003e\n        \u003cRegionCode\u003eNV\u003c/RegionCode\u003e\n        \u003cRegionName/\u003e\n        \u003cCity\u003eLas Vegas\u003c/City\u003e\n        \u003cZipCode\u003e89129\u003c/ZipCode\u003e\n        \u003cTimeZone\u003eAmerica/Los_Angeles\u003c/TimeZone\u003e\n        \u003cLongitude\u003e-115.2821\u003c/Longitude\u003e\n        \u003cLatitude\u003e36.2473\u003c/Latitude\u003e\n        \u003cAccuracyRadius\u003e20\u003c/AccuracyRadius\u003e\n        \u003cMetroCode\u003e839\u003c/MetroCode\u003e\n        \u003cCountry\u003e\n            \u003cCode\u003eUS\u003c/Code\u003e\n            \u003cCIOC\u003eUSA\u003c/CIOC\u003e\n            \u003cCCN3\u003e840\u003c/CCN3\u003e\n            \u003cCallCode\u003e1\u003c/CallCode\u003e\n            \u003cInternationalPrefix\u003e011\u003c/InternationalPrefix\u003e\n            \u003cCapital\u003eWashington D.C.\u003c/Capital\u003e\n            \u003cName\u003eUnited States\u003c/Name\u003e\n            \u003cFullName\u003eUnited States of America\u003c/FullName\u003e\n            \u003cArea\u003e9.37261e+06\u003c/Area\u003e\n            \u003cBorders\u003eCAN\u003c/Borders\u003e\n            \u003cBorders\u003eMEX\u003c/Borders\u003e\n            \u003cLatitude\u003e39.443256\u003c/Latitude\u003e\n            \u003cLongitude\u003e-98.95734\u003c/Longitude\u003e\n            \u003cMaxLatitude\u003e71.441055\u003c/MaxLatitude\u003e\n            \u003cMaxLongitude\u003e-66.885414\u003c/MaxLongitude\u003e\n            \u003cMinLatitude\u003e17.831509\u003c/MinLatitude\u003e\n            \u003cMinLongitude\u003e-179.23108\u003c/MinLongitude\u003e\n            \u003cCurrency\u003e\n                \u003cCode\u003eUSD\u003c/Code\u003e\n                \u003cName/\u003e\n            \u003c/Currency\u003e\n            \u003cCurrency\u003e\n                \u003cCode\u003eUSN\u003c/Code\u003e\n                \u003cName/\u003e\n            \u003c/Currency\u003e\n            \u003cCurrency\u003e\n                \u003cCode\u003eUSS\u003c/Code\u003e\n                \u003cName/\u003e\n            \u003c/Currency\u003e\n            \u003cContinent\u003e\n                \u003cCode/\u003e\n                \u003cName\u003eNorth America\u003c/Name\u003e\n                \u003cSubRegion/\u003e\n            \u003c/Continent\u003e\n        \u003c/Country\u003e\n    \u003c/Location\u003e\n    \u003cSystem\u003e\n        \u003cOS\u003eLinux\u003c/OS\u003e\n        \u003cBrowser\u003eUbuntu Chromium\u003c/Browser\u003e\n        \u003cVersion\u003e79.0.3945.79\u003c/Version\u003e\n        \u003cOSVersion\u003ex86_64\u003c/OSVersion\u003e\n        \u003cDevice/\u003e\n        \u003cMobile\u003efalse\u003c/Mobile\u003e\n        \u003cTablet\u003efalse\u003c/Tablet\u003e\n        \u003cDesktop\u003etrue\u003c/Desktop\u003e\n    \u003c/System\u003e\n    \u003cUser\u003e\n        \u003cLanguage\u003e\n            \u003cLanguage\u003een\u003c/Language\u003e\n            \u003cRegion\u003eUS\u003c/Region\u003e\n            \u003cTag\u003een-US\u003c/Tag\u003e\n        \u003c/Language\u003e\n    \u003c/User\u003e\n\u003c/Response\u003e\n```\n\n#### JSON\n```bash\ncurl :8080/json/208.13.138.36\n```\n```json\n{\n  \"network\": {\n    \"ip\": \"208.13.138.36\",\n    \"as\": {\n      \"number\": 209,\n      \"name\": \"CenturyLink Communications, LLC\"\n    },\n    \"isp\": \"\",\n    \"domain\": \"\",\n    \"tld\": [\".us\"],\n    \"bot\": false,\n    \"tor\": false,\n    \"proxy\": false,\n    \"proxy_type\": \"\",\n    \"last_seen\": 0,\n    \"usage_type\": \"\"\n  },\n  \"location\": {\n    \"region_code\": \"NV\",\n    \"region_name\": \"\",\n    \"city\": \"Las Vegas\",\n    \"zip_code\": \"89129\",\n    \"time_zone\": \"America/Los_Angeles\",\n    \"longitude\": -115.2821,\n    \"latitude\": 36.2473,\n    \"accuracy_radius\": 20,\n    \"metro_code\": 839,\n    \"country\": {\n      \"code\": \"US\",\n      \"cioc\": \"USA\",\n      \"ccn3\": \"840\",\n      \"call_code\": [\"1\"],\n      \"international_prefix\": \"011\",\n      \"capital\": \"Washington D.C.\",\n      \"name\": \"United States\",\n      \"full_name\": \"United States of America\",\n      \"area\": 9372610,\n      \"borders\": [\"CAN\", \"MEX\"],\n      \"latitude\": 39.443256,\n      \"longitude\": -98.95734,\n      \"max_latitude\": 71.441055,\n      \"max_longitude\": -66.885414,\n      \"min_latitude\": 17.831509,\n      \"min_longitude\": -179.23108,\n      \"currency\": [{\n          \"code\": \"USD\",\n          \"name\": \"\"\n       }, {\n          \"code\": \"USN\",\n          \"name\": \"\"\n       }, {\n          \"code\": \"USS\",\n          \"name\": \"\"\n      }],\n      \"continent\": {\n        \"code\": \"\",\n        \"name\": \"North America\",\n        \"sub_region\": \"\"\n      }\n    }\n  }\n}\n```\n```bash\ncurl :8080/json/208.13.138.36?user\n```\n```json\n{\n  \"network\": {\n    \"ip\": \"208.13.138.36\",\n    \"as\": {\n      \"number\": 209,\n      \"name\": \"CenturyLink Communications, LLC\"\n    },\n    \"isp\": \"\",\n    \"domain\": \"\",\n    \"tld\": [\".us\"],\n    \"bot\": false,\n    \"tor\": false,\n    \"proxy\": false,\n    \"proxy_type\": \"\",\n    \"last_seen\": 0,\n    \"usage_type\": \"\"\n  },\n  \"location\": {\n    \"region_code\": \"NV\",\n    \"region_name\": \"\",\n    \"city\": \"Las Vegas\",\n    \"zip_code\": \"89129\",\n    \"time_zone\": \"America/Los_Angeles\",\n    \"longitude\": -115.2821,\n    \"latitude\": 36.2473,\n    \"accuracy_radius\": 20,\n    \"metro_code\": 839,\n    \"country\": {\n      \"code\": \"US\",\n      \"cioc\": \"USA\",\n      \"ccn3\": \"840\",\n      \"call_code\": [\"1\"],\n      \"international_prefix\": \"011\",\n      \"capital\": \"Washington D.C.\",\n      \"name\": \"United States\",\n      \"full_name\": \"United States of America\",\n      \"area\": 9372610,\n      \"borders\": [\"CAN\", \"MEX\"],\n      \"latitude\": 39.443256,\n      \"longitude\": -98.95734,\n      \"max_latitude\": 71.441055,\n      \"max_longitude\": -66.885414,\n      \"min_latitude\": 17.831509,\n      \"min_longitude\": -179.23108,\n      \"currency\": [{\n          \"code\": \"USD\",\n          \"name\": \"\"\n       }, {\n          \"code\": \"USN\",\n          \"name\": \"\"\n       }, {\n          \"code\": \"USS\",\n          \"name\": \"\"\n      }],\n      \"continent\": {\n        \"code\": \"\",\n        \"name\": \"North America\",\n        \"sub_region\": \"\"\n      }\n    }\n  },\n  \"system\": {\n    \"os\": \"Linux\",\n    \"browser\": \"Ubuntu Chromium\",\n    \"version\": \"79.0.3945.79\",\n    \"os_version\": \"x86_64\",\n    \"device\": \"\",\n    \"mobile\": false,\n    \"tablet\": false,\n    \"desktop\": true\n  },\n  \"user\": {\n    \"language\": {\n      \"language\": \"en\",\n      \"region\": \"US\",\n      \"tag\": \"en-US\"\n    }\n  }\n}\n```\n\n#### JSONP\n```bash\ncurl :8080/json/208.13.138.36?callback=foobar\n```\n```javascript\nfoobar({\n \"network\": {\n   \"ip\": \"208.13.138.36\",\n   \"as\": {\n     \"number\": 209,\n     \"name\": \"CenturyLink Communications, LLC\"\n   },\n   \"isp\": \"\",\n   \"domain\": \"\",\n   \"tld\": [\".us\"],\n   \"bot\": false,\n   \"tor\": false,\n   \"proxy\": false,\n   \"proxy_type\": \"\",\n   \"last_seen\": 0,\n   \"usage_type\": \"\"\n },\n \"location\": {\n   \"region_code\": \"NV\",\n   \"region_name\": \"\",\n   \"city\": \"Las Vegas\",\n   \"zip_code\": \"89129\",\n   \"time_zone\": \"America/Los_Angeles\",\n   \"longitude\": -115.2821,\n   \"latitude\": 36.2473,\n   \"accuracy_radius\": 20,\n   \"metro_code\": 839,\n   \"country\": {\n     \"code\": \"US\",\n     \"cioc\": \"USA\",\n     \"ccn3\": \"840\",\n     \"call_code\": [\"1\"],\n     \"international_prefix\": \"011\",\n     \"capital\": \"Washington D.C.\",\n     \"name\": \"United States\",\n     \"full_name\": \"United States of America\",\n     \"area\": 9372610,\n     \"borders\": [\"CAN\", \"MEX\"],\n     \"latitude\": 39.443256,\n     \"longitude\": -98.95734,\n     \"max_latitude\": 71.441055,\n     \"max_longitude\": -66.885414,\n     \"min_latitude\": 17.831509,\n     \"min_longitude\": -179.23108,\n     \"currency\": [{\n         \"code\": \"USD\",\n         \"name\": \"\"\n      }, {\n         \"code\": \"USN\",\n         \"name\": \"\"\n      }, {\n         \"code\": \"USS\",\n         \"name\": \"\"\n     }],\n     \"continent\": {\n       \"code\": \"\",\n       \"name\": \"North America\",\n       \"sub_region\": \"\"\n     }\n   }\n }\n});\n```\nThe callback parameter is ignored on all other endpoints.\n\n### Build\nYou can build your own binaries by calling `build.sh`\n```bash\nbuild.sh build_dir\n```\n\n### Features \u0026 pull requests\nEveryone can contribute to this project. Every pull request will be considered but it can also happen to be declined. \nTo prevent unnecessary work, please consider to create a [feature issue](https://github.com/webklex/gogeoip/issues/new?template=feature_request.md) \nfirst, if you're planning to do bigger changes. Of course you can also create a new [feature issue](https://github.com/webklex/gogeoip/issues/new?template=feature_request.md)\nif you're just wishing a feature ;)\n\n\u003eOff topic, rude or abusive issues will be deleted without any notice.\n\n\n## Support\nIf you encounter any problems or if you find a bug, please don't hesitate to create a new [issue](https://github.com/webklex/gogeoip/issues).\nHowever please be aware that it might take some time to get an answer.\n\nIf you need **immediate** or **commercial** support, feel free to send me a mail at github@webklex.com. \n\n## Change log\n\nPlease see [CHANGELOG](CHANGELOG.md) for more information what has changed recently.\n\n## Security\n\nIf you discover any security related issues, please email github@webklex.com instead of using the issue tracker.\n\n## Credits\n- [Webklex][link-author]\n- [All Contributors][link-contributors]\n\n## License\nThe MIT License (MIT). Please see [License File](LICENSE.md) for more information.\n\n[ico-license]: https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square\n[ico-release]: https://img.shields.io/github/v/release/webklex/gogeoip?style=flat-square\n[ico-downloads]: https://img.shields.io/github/downloads/webklex/gogeoip/total?style=flat-square\n[ico-website-status]: https://img.shields.io/website?down_message=Offline\u0026label=Demo\u0026style=flat-square\u0026up_message=Online\u0026url=https%3A%2F%2Fwww.gogeoip.com%2F\n[ico-hits]: https://hits.webklex.com/svg/webklex/gogeoip?1\n\n[link-hits]: https://hits.webklex.com\n[link-author]: https://github.com/webklex\n[link-contributors]: https://github.com/webklex/gogeoip/graphs/contributors\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwebklex%2Fgogeoip","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwebklex%2Fgogeoip","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwebklex%2Fgogeoip/lists"}