Go to file
dependabot[bot] 93f561d6ef
Bump github.com/docker/docker from 20.10.24+incompatible to 24.0.7+incompatible (#18)
* Bump github.com/docker/docker

Bumps [github.com/docker/docker](https://github.com/docker/docker) from 20.10.24+incompatible to 24.0.7+incompatible.
- [Release notes](https://github.com/docker/docker/releases)
- [Commits](https://github.com/docker/docker/compare/v20.10.24...v24.0.7)

---
updated-dependencies:
- dependency-name: github.com/docker/docker
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update dependencies

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Daniel Carrillo <daniel.carrillo@gmail.com>
2023-10-30 19:17:40 +01:00
.github/workflows [ci] Remove unused lines from codeql-analysis.yml 2023-10-12 12:52:44 +02:00
cmd Initial server handling refactor (#9) 2023-03-20 16:36:55 +01:00
integration-tests Update test to latest quic version 2023-07-22 13:20:17 +02:00
internal Add experimental support for HTTP/3 (#8) 2023-03-18 21:06:51 +01:00
models Remove redundant ifs 2023-03-10 19:27:10 +01:00
router Use gin-gonic/contrib/secure instead of deprecated module 2022-05-07 12:51:13 +02:00
server Remove useless function 2023-03-21 20:19:11 +01:00
service Add CI and go-report badges. Add comments to make golint happy 2021-11-30 17:49:02 +01:00
test first commit 2021-11-10 20:06:12 +01:00
Dockerfile Bump golang version to 1.21 2023-08-25 18:34:21 +02:00
go.mod Bump github.com/docker/docker from 20.10.24+incompatible to 24.0.7+incompatible (#18) 2023-10-30 19:17:40 +01:00
go.sum Bump github.com/docker/docker from 20.10.24+incompatible to 24.0.7+incompatible (#18) 2023-10-30 19:17:40 +01:00
LICENSE Fix LICENSE file, a tgz instead of text plain was commited by mistake 2021-11-18 13:04:38 +01:00
Makefile chore: update linters and go action 2023-01-26 20:47:03 +01:00
README.md Add upx compression to Dockerfile 2023-04-29 18:49:21 +02:00

What is my IP address

CI CodeQL Go Report Card GitHub release License Apache 2.0

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.
  • Experimental HTTP/3 support. HTTP/3 requires a TLS server running (-tls-bind), as HTTP/3 starts as a TLS connection that then gets upgraded to UDP. The UDP port is the same as the one used for the TLS server.
  • Can run behind a proxy by trusting a custom header (usually X-Real-IP) to figure out the source IP address. It also supports a custom header to resolve the client port, if the proxy can only add a header for the IP (for example a fixed header from CDNs) the client port is shown as unknown.
  • 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 that 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.19 is required.

make build

Usage

Usage of whatismyip:
  -bind string
        Listening address (see https://pkg.go.dev/net?#Listen) (default ":8080")
  -enable-http3
        Enable HTTP/3 protocol. HTTP/3 requires --tls-bind set, as HTTP/3 starts as a TLS connection that then gets upgraded to UDP. The UDP port is the same as the one used for the TLS server.
  -enable-secure-headers
        Add sane security-related headers to every response
  -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). When using this feature if -trusted-port-header is not set the client port is shown as 'unknown'
  -trusted-port-header string
        Trusted request header for remote client port (e.g. X-Real-Port). When this parameter is set -trusted-header becomes mandatory
  -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 an HTTP/3 server

./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 -enable-http3

Run a default TCP server with a custom template and trust a pair of custom headers 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 -trusted-port-header X-Real-Port -template mytemplate.tmpl

Download

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

Docker

An ultra-light (~4MB) image is available on docker hub. Since version 2.1.2, the binary is compressed using upx.

Run 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