You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Daniel Carrillo f7d0a679c9
Add test for geo model
2 months ago
.github/workflows Enable automatic releases 2 months ago
cmd Refactor setting module and add tests (#4) 2 months ago
integration-tests refactor on some tests 2 months ago
internal Add CI and go-report badges. Add comments to make golint happy 2 months ago
models Add test for geo model 2 months ago
router Add CI and go-report badges. Add comments to make golint happy 2 months ago
service Add CI and go-report badges. Add comments to make golint happy 2 months ago
test first commit 2 months ago
Dockerfile Add github workflow (#1) 2 months ago
LICENSE Fix LICENSE file, a tgz instead of text plain was commited by mistake 2 months ago
Makefile Fix format errors and add gofmt and golines to Makefile 2 months ago
README.md Add release badge to README 2 months ago
go.mod Update Gin and testcontainers to latest version 2 months ago
go.sum Update Gin and testcontainers to latest version 2 months ago

README.md

What is my IP address

CI Go Report Card GitHub release

Just another "what is my IP address" service, including geolocation and headers information, written in go with high performance in mind, it uses gin which uses httprouter a lightweight high performance HTTP multiplexer.

Take a look at ifconfig.es a live site using whatismyip

Get your public IP easily from the command line:

curl ifconfig.es
127.0.0.1

curl -6 ifconfig.es
::1

Features

  • TLS and HTTP/2.
  • Can run behind a proxy by trusting a custom header (usually X-Real-IP) to figure out the source IP address.
  • IPv4 and IPv6.
  • Geolocation info including ASN. This feature is possible thanks to maxmind GeoLite2 databases. In order to use these databases, a license key is needed. Please visit Maxmind site for further instructions and get a free license.
  • High performance.
  • Self-contained server what can reload GeoLite2 databases and/or SSL certificates without stop/start. The hup signal is honored.
  • HTML templates for the landing page.
  • Text plain and JSON output.

Endpoints

Build

Golang >= 1.17 is required. Previous versions may work.

make build

Usage

Usage of ./whatismyip:
  -bind string
        Listening address (see https://pkg.go.dev/net?#Listen) (default ":8080")
  -geoip2-asn string
        Path to GeoIP2 ASN database
  -geoip2-city string
        Path to GeoIP2 city database
  -template string
        Path to template file
  -tls-bind string
        Listening address for TLS (see https://pkg.go.dev/net?#Listen)
  -tls-crt string
        When using TLS, path to certificate file
  -tls-key string
        When using TLS, path to private key file
  -trusted-header string
        Trusted request header for remote IP (e.g. X-Real-IP)
  -version
        Output version information and exit

Examples

Run a default TCP server

./whatismyip -geoip2-city ./test/GeoIP2-City-Test.mmdb -geoip2-asn ./test/GeoLite2-ASN-Test.mmdb

Run a TLS (HTTP/2) server only

./whatismyip -geoip2-city ./test/GeoIP2-City-Test.mmdb -geoip2-asn ./test/GeoLite2-ASN-Test.mmdb -bind "" -tls-bind :8081 -tls-crt ./test/server.pem -tls-key ./test/server.key

Run a default TCP server with a custom template and trust a custom header set by an upstream proxy

./whatismyip -geoip2-city ./test/GeoIP2-City-Test.mmdb -geoip2-asn ./test/GeoLite2-ASN-Test.mmdb -trusted-header X-Real-IP -template mytemplate.tmpl

Download

Download latest version from https://github.com/dcarrillo/whatismyip/releases

Docker

An ultra-light (~9MB) image is available.

Running a container locally using test databases

make docker-run

From Docker Hub

docker run --tty --interactive --rm \
    -v $PWD/<path to city database>:/tmp/GeoIP2-City-Test.mmdb:ro \
    -v $PWD/<path to ASN database>:/tmp/GeoLite2-ASN-Test.mmdb:ro -p 8080:8080 \
    dcarrillo/whatismyip:latest \
    -geoip2-city /tmp/GeoIP2-City-Test.mmdb \
    -geoip2-asn /tmp/GeoLite2-ASN-Test.mmdb