๐Ÿงฐ MyIP - A Better IP Toolbox

April 22, 2026 ยท View on GitHub

IPCheck.ing Banner

jason5ng32%2FMyIP | Trendshift

Mentioned in Awesome Self Hosted

GitHub Repo stars GitHub forks Docker Pulls

Website PWA

CodeQL Docker Build and Push

๐Ÿ‡บ๐Ÿ‡ธ English | ๐Ÿ‡จ๐Ÿ‡ณ ็ฎ€ไฝ“ไธญๆ–‡ | ๐Ÿ‡ซ๐Ÿ‡ท Franรงais | ๐Ÿ‡น๐Ÿ‡ท Tรผrkรงe

๐Ÿ‘‰ Demo: https://ipcheck.ing

Feel free to bookmark the demo or deploy your own.

Deploy with Docker

๐Ÿ‘€ Main Features

  • ๐Ÿ›œ View Your IPs: Detects and displays your local IPs, sourcing from multiple IPv4 and IPv6 providers.
  • ๐Ÿ” Search IP Information: Provides a tool for querying information about any IP address.
  • ๐Ÿ•ต๏ธ IP Information: Presents detailed information for all IP addresses, including country, region, ASN, geographic location, and more.
  • ๐Ÿšฆ Availability Check: Tests the accessibility of various websites, such as Google, GitHub, YouTube, ChatGPT, and others.
  • ๐Ÿšฅ WebRTC Detection: Identifies the IP address used during WebRTC connections.
  • ๐Ÿ›‘ DNS Leak Test: Shows DNS endpoint data to evaluate the risk of DNS leaks when using VPNs or proxies.
  • ๐Ÿš€ Speed Test๏ผšTest your network speed with edge networks.
  • ๐Ÿš Proxy Rule Testing: Test the rule settings of proxy software to ensure their correctness.
  • โฑ๏ธ Global Latency Test: Performe lantency tests on servers located in different regions around the world.
  • ๐Ÿ“ก MTR Test: Perform MTR tests on servers located in different regions around the world.
  • ๐Ÿ”ฆ DNS Resolver: Performs DNS resolution of a domain name from multiple sources and obtains real-time resolution results that can be used for contamination determination.
  • ๐Ÿšง Censorship Check: Check if a website is blocked in some countries.
  • ๐Ÿ““ Whois Search: Perform whois information search for domain names or IP addresses
  • ๐Ÿ“€ MAC Lookup: Query information of a physical address
  • ๐Ÿ–ฅ๏ธ Browser Fingerprints๏ผšMultiple ways to caculate your browser fingerprint
  • ๐Ÿ“‹ Cybersecurity Checklist๏ผšA comprehensive cybersecurity checklist with a total of 258 items

๐Ÿ’ช Also

  • ๐ŸŒ— Dark Mode: Automatically toggles between dark and daylight modes based on system settings, with an option for manual switching.
  • ๐Ÿ“ฑ Minimalist Mode: A mobile-optimized mode that shortens page length for quick access to essential information..
  • ๐Ÿ“ฒ PWA Supported๏ผšCan be added as a desktop app on your phone as well as a Chrome app on your computer.
  • โŒจ๏ธ Keyboard Shortcuts: Supports keyboard shortcuts for all functions, press ? to view the shortcut list.
  • ๐ŸŒ Based on availability test results, it indicates whether global internet access is currently feasible.
  • ๐Ÿ‡บ๐Ÿ‡ธ ๐Ÿ‡จ๐Ÿ‡ณ ๐Ÿ‡ซ๐Ÿ‡ท ๐Ÿ‡น๐Ÿ‡ท English, Chinese, French, and Turkish support.

๐Ÿ“• How to Use

Deploying in a Node Environment

Make sure you have Node.js installed.

Clone the code:

git clone https://github.com/jason5ng32/MyIP.git

Install and build:

npm install && npm run build

Run:

npm start

The program will run on port 18966.

Using Docker

Click the 'Deploy to Docker' button at the top to complete the deployment. Or, use the following shell:

docker run -d -p 18966:18966 --name myip --restart always jason5ng32/myip:latest

๐Ÿ“š Environment Variable

Variables marked Yes below must be set for the backend to function correctly. The MaxMind credentials in particular are required โ€” read the setup notes in the next subsection before filling in the table.

MaxMind Databases (Required)

MyIP relies on the free GeoLite2 databases from MaxMind (City + ASN) for IP geolocation, ASN / organization lookup, and the country-code badges that appear throughout the app (IP cards, WebRTC ICE candidates, and more). A working MaxMind setup is required for the backend to serve a complete experience.

The .mmdb files are not checked into this repository because MaxMind's GeoLite2 license does not allow redistribution. You need to provide them yourself. There are two paths:

Option A โ€” Automatic (recommended, required for Docker)

  1. Create a free account at maxmind.com/en/geolite2/signup.
  2. Generate a license key from your account's "Manage License Keys" page.
  3. Set these three environment variables:
    MAXMIND_ACCOUNT_ID="your-account-id"
    MAXMIND_LICENSE_KEY="your-license-key"
    MAXMIND_AUTO_UPDATE="true"
    
  4. Start the backend. Within about 60 seconds of the first startup, the updater will download both databases. They are then refreshed every 24 hours automatically.

โš ๏ธ Docker deployers must use Option A. A fresh container ships with an empty common/maxmind-db/ directory โ€” without the three variables above the backend starts, but the MaxMind-powered IP source and WebRTC country badges will not work, and you'll see MaxMind API will return 503... in the logs on every boot.

Option B โ€” Manual (for air-gapped or non-Docker setups)

Download GeoLite2-City.mmdb and GeoLite2-ASN.mmdb from your MaxMind account and drop them into common/maxmind-db/ before starting the backend. With this approach MAXMIND_AUTO_UPDATE can stay "false", but you'll need to refresh the files manually as MaxMind publishes new versions.

Environment variables list

Variable NameRequiredDefault ValueDescription
MAXMIND_ACCOUNT_IDYes""MaxMind account ID, paired with MAXMIND_LICENSE_KEY to download GeoLite2 databases. See the MaxMind section above.
MAXMIND_LICENSE_KEYYes""MaxMind license key, paired with MAXMIND_ACCOUNT_ID. See the MaxMind section above.
MAXMIND_AUTO_UPDATEYes"false"Set to "true" to auto-download GeoLite2 databases ~60s after startup and refresh every 24h. Required for Docker. Can stay "false" only if you've pre-seeded the .mmdb files manually.
VITE_GOOGLE_ANALYTICS_IDYes""Google Analytics ID, used to track user behavior
BACKEND_PORTNo"11966"The running port of the backend part of the program
FRONTEND_PORTNo"18966"The running port of the frontend part of the program
SECURITY_RATE_LIMITNo"0"Controls the number of requests an IP can make to the backend server every 60 minutes (set to 0 for no limit)
SECURITY_DELAY_AFTERNo"0"Controls the first X requests from an IP every 20 minutes that are not subject to speed limits, and after X requests, the delay will increase
SECURITY_BLACKLIST_LOG_FILE_PATHNo"logs/blacklist-ip.log"Path setting. Records the list of IPs that triggered the limit after SECURITY_RATE_LIMIT is enabled
LOG_LEVELNo"info"Minimum log level (debug / info / warn / error). Lower-level messages are suppressed.
LOG_FORMATNoprettySet to "json" to emit one JSON event per line (for log aggregators / jq). Any other value (or unset) keeps the colored pretty output used in dev and pm2 log tails.
LOG_HTTPNo"false"Set to "true" to enable per-request HTTP logging on /api/* (method, URL, status, response time). Off by default to keep pm2 logs lean. Handler-level 4xx/5xx errors are always logged regardless of this flag.
ALLOWED_DOMAINSNo""Allowed domains for access, separated by commas, used to prevent misuse of the backend API
GOOGLE_MAP_API_KEYNo""API Key for Google Maps, used to display the location of the IP on a map
IPCHECKING_API_ENDPOINTNo""API endpoint for IPCheck.ing database, used to obtain accurate IP geolocation information
IPCHECKING_API_KEYNo""API Key for IPCheck.ing database, used to obtain accurate IP geolocation information
IPINFO_API_TOKENNo""API Token for IPInfo.io, used to obtain IP geolocation information through IPInfo.io
IPAPIIS_API_KEYNo""API Key for IPAPI.is, used to obtain IP geolocation information through IPAPI.is
IP2LOCATION_API_KEYNo""API Key for IP2Location.io, used to obtain IP geolocation information through IP2Location.io
CLOUDFLARE_APINo""API Key for Cloudflare, used to obtain AS system information through Cloudflare
MAC_LOOKUP_API_KEYNo""API Key for MAC Lookup, used to obtain MAC address information
VITE_CURL_IPV4_DOMAINNo""Provides the IPv4 domain for the CURL API to users
VITE_CURL_IPV6_DOMAINNo""Provides the IPv6 domain for the CURL API to users
VITE_CURL_IPV64_DOMAINNo""Provides the dual-stack domain for the CURL API to users

Note that if any of the CURL series environment variables are missing, the CURL API will not be enabled.

Using Environment Variables in a Node Environment

Create environment variables:

cp .env.example .env

Modify .env, and for example, add the following:

BACKEND_PORT=11966
FRONTEND_PORT=18966
MAXMIND_ACCOUNT_ID="YOUR_ACCOUNT_ID"
MAXMIND_LICENSE_KEY="YOUR_LICENSE_KEY"
MAXMIND_AUTO_UPDATE="true"
GOOGLE_MAP_API_KEY="YOUR_KEY_HERE"
ALLOWED_DOMAINS="example.com"

Then restart the backend service.

Using Environment Variables in Docker

You can add environment variables when running Docker, for example:

docker run -d -p 18966:18966 \
  -e MAXMIND_ACCOUNT_ID="YOUR_ACCOUNT_ID" \
  -e MAXMIND_LICENSE_KEY="YOUR_LICENSE_KEY" \
  -e MAXMIND_AUTO_UPDATE="true" \
  -e GOOGLE_MAP_API_KEY="YOUR_KEY_HERE" \
  -e ALLOWED_DOMAINS="example.com" \
  --name myip \
  jason5ng32/myip:latest

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป Advanced Usage

If you're using a proxy for internet access, consider adding this rule to your proxy configuration (modify it according to your client). This setup lets you check both your real IP and the IP when using the proxy:

# IP Testing
IP-CIDR,1.0.0.2/32,Proxy,no-resolve
IP-CIDR6,2606:4700:4700::1111/128,Proxy,no-resolve
DOMAIN,4.ipcheck.ing,DIRECT
DOMAIN,6.ipcheck.ing,DIRECT
# Rule Testing
DOMAIN,ptest-1.ipcheck.ing,Proxy1
DOMAIN,ptest-2.ipcheck.ing,Proxy2
DOMAIN,ptest-3.ipcheck.ing,Proxy3
DOMAIN,ptest-4.ipcheck.ing,Proxy4
DOMAIN,ptest-5.ipcheck.ing,Proxy5
DOMAIN,ptest-6.ipcheck.ing,Proxy6
DOMAIN,ptest-7.ipcheck.ing,Proxy7
DOMAIN,ptest-8.ipcheck.ing,Proxy8

๐Ÿ˜ถโ€๐ŸŒซ๏ธ Additional Notes

When version 2.0 was released, I said that 70% of the code for this program was not written by me, but by AI. After about 90 interactions, plus some minor manual adjustments, the entire codebase was completed.

Of course, the architecture and UI still required my own design.

With the release of version 3.0 and subsequent versions, the proportion of code written with the help of AI has gradually decreased, now estimated to be between 40% and 50%. On the contrary, in this process, I went from having no knowledge of JavaScript and Vue to being able to understand most of the JS code, and I can now write some on my own.

Thanks to AI, it has given me, an unemployed product manager, a rapid opportunity to learn programming.

๐ŸŒŸ Star History

Star History Chart

๐Ÿ’– Sponsors

As a open source project, I'm very grateful to the following sponsors for their support:

Cloudflare Project Alexandria