Go to file
Ethan Knowlton 967931fd25 Enable use of Environment Variables
I didn't want to kep the API Key in a file because it could be exposed
so I thought a environment variable would be good. Might of got carried
away and didn't need to put all config options in environment variables.

commit ba35fa73512a5d0d868c9e9147f55fe50db0ec99
Author: Ethan Knowlton <ethan@dubtown.dev>
Date:   Sat Oct 7 22:35:31 2023 -0400

    removed debug statement

commit 3808cc26dfac70e5c205df807b26855bf4562196
Author: Ethan Knowlton <ethan@dubtown.dev>
Date:   Sat Oct 7 22:32:27 2023 -0400

    Could Cause Problems

    Shouldn't need to run make as super user, but usually
    you would run `make install`. I could add this to the install step
    and remove the install from all step but it could mess up publishing
    to ip.level.io.

    Just going to remove it for now.

commit aa0cb39b08e71e1ef897f2d3f3a4fc7e5aff4c03
Author: Ethan Knowlton <ethan@dubtown.dev>
Date:   Sat Oct 7 20:05:14 2023 -0400

    adding env variables to readme
2023-10-08 14:46:51 -04:00
.github/workflows Cache in Redis 2023-10-07 01:21:52 -04:00
cache Cache in Redis 2023-10-07 01:21:52 -04:00
cmd/echoip Enable use of Environment Variables 2023-10-08 14:46:51 -04:00
config Enable use of Environment Variables 2023-10-08 14:46:51 -04:00
etc Enable use of Environment Variables 2023-10-08 14:46:51 -04:00
html Merge branch 'master' of github.com:levelsoftware/echoip into adding-extra-ipstack-fields 2023-10-05 11:03:03 -04:00
http Cache in Redis 2023-10-07 01:21:52 -04:00
iputil Cache in Redis 2023-10-07 01:21:52 -04:00
useragent return parsed and raw user agent 2019-07-13 22:50:31 +00:00
.dockerignore Enable use of Environment Variables 2023-10-08 14:46:51 -04:00
.gitignore Enable use of Environment Variables 2023-10-08 14:46:51 -04:00
CHANGELOG.md touch up change log until API limit `create-release-please` 2023-10-07 01:27:22 -04:00
Dockerfile Enable use of Environment Variables 2023-10-08 14:46:51 -04:00
LICENSE Update copyright year 2020-04-07 17:59:23 +02:00
Makefile Enable use of Environment Variables 2023-10-08 14:46:51 -04:00
README.md Enable use of Environment Variables 2023-10-08 14:46:51 -04:00
docker-compose.yaml Enable use of Environment Variables 2023-10-08 14:46:51 -04:00
go.mod Enable use of Environment Variables 2023-10-08 14:46:51 -04:00
go.sum Enable use of Environment Variables 2023-10-08 14:46:51 -04:00

README.md

echoip

A simple service for looking up your IP address. This is the code that powers https://ip.level.io.

Usage

Just the business, please:

$ curl ip.level.io
127.0.0.1

$ http ip.level.io
127.0.0.1

$ wget -qO- ip.level.io
127.0.0.1

$ fetch -qo- https://ip.level.io
127.0.0.1

$ bat -print=b ip.level.io/ip
127.0.0.1

Country and city lookup:

$ curl ip.level.io/country
Elbonia

$ curl ip.level.io/country-iso
EB

$ curl ip.level.io/city
Bornyasherk

$ curl ip.level.io/asn
AS59795

$ curl ip.level.io/asn-org
Hosting4Real

As JSON:

$ curl -H 'Accept: application/json' ip.level.io  # or curl ip.level.io/json
{
  "city": "Bornyasherk",
  "country": "Elbonia",
  "country_iso": "EB",
  "ip": "127.0.0.1",
  "ip_decimal": 2130706433,
  "asn": "AS59795",
  "asn_org": "Hosting4Real"
}

Port testing:

$ curl ip.level.io/port/80
{
  "ip": "127.0.0.1",
  "port": 80,
  "reachable": false
}

Pass the appropriate flag (usually -4 and -6) to your client to switch between IPv4 and IPv6 lookup.

Features

  • Easy to remember domain name
  • Fast
  • Supports IPv6
  • Supports HTTPS
  • Supports common command-line clients (e.g. curl, httpie, ht, wget and fetch)
  • JSON output
  • ASN, country and city lookup using the MaxMind GeoIP database
  • Port testing
  • All endpoints (except /port) can return information about a custom IP address specified via ?ip= query parameter
  • Open source under the BSD 3-Clause license
  • Supports IP Stack API or GeoIP

Installation from Release

  • Download release file.
  • Install ./echoip binary ( sudo install echoip /usr/local/bin/echoip )
  • Install configuration file( sudo install -D etc/echoip/config.toml /etc/echoip/config.toml )
  • Point config.TemplateDir to release html/

Installation from Source

  • Install Go 1.18
  • $ cd echoip/
  • $ make install

Usage

$ echoip

Configuration

Configuration is managed in the etc/echoip/config.toml file. This file should be located in the /etc folder on your server ( /etc/echoip/config.toml ). If you have the project on your server, you can run make install-config to copy it the right location.

Listen = ":8080"
TemplateDir = "html" # The directory of the template files ( eg, index.html )
RedisUrl = "redis://localhost:6379" # Redis Connection URL, leave blank for no Cache
CacheTtl = 3600 # in seconds
ReverseLookup = true
PortLookup = true
ShowSponsor = true
Database = "ipstack" # use "IP Stack" or "GeoIP"
TrustedHeaders = [] # Which header to trust, eg, `["X-Real-IP"]`
Profile = false # enable debug / profiling

[IPStack]
ApiKey = "" 
UseHttps = true
EnableSecurity = true

[GeoIP]
CountryFile = ""
CityFile = ""
AsnFile = ""

Environment Variables for Configuration

You can also use environment variables for configuration, most likely used for Docker.

ECHOIP_LISTEN=":8080"
ECHOIP_TEMPLATE_DIR="html/"
ECHOIP_REDIS_URL="redis://localhost:6379"
ECHOIP_DATABASE="ipstack"
ECHOIP_IPSTACK_API_KEY="askdfj39sjdkf29dsjfk39sdfkj3"
ECHOIP_GEOIP_COUNTRY_FILE="/full/path/to/file.db"
ECHOIP_GEOIP_CITY_FILE="/full/path/to/file.db"
ECHOIP_GEOIP_ASN_FILE="/full/path/to/file.db"
ECHOIP_CACHE_TTL=3600
ECHOIP_REVERSE_LOOKUP=true
ECHOIP_PORT_LOOKUP=true
ECHOIP_SHOW_SPONSOR=true
ECHOIP_PROFILE=false
ECHOIP_IPSTACK_USE_HTTPS=true
ECHOIP_IPSTACK_ENABLE_SECURITY=true

Caching with Redis

You can connect EchoIP to a Redis client to cache each request per IP. You can configure the life of the key in config.CacheTtl.

Running with systemd

There is a systemd service file you can install in /etc/systemd.