What this page is actually showing you
When your browser connects to this site, the packets carry a source address. That address is rewritten at least once on the way here — by your router doing NAT, often again by your ISP, and finally by the reverse proxy in front of this application. What we report is the address at the last point where it was still attributable to you: the left-most entry of the X-Forwarded-For header, falling back to X-Real-IP or CF-Connecting-IP when the proxy in front of us sets only one of those.
This is why the address here almost never matches what ipconfig or ip addr prints on your machine. Those commands show the private address your router handed you — usually something in 192.168.0.0/16 or 10.0.0.0/8. That address is not routable on the public internet and cannot be reached from outside your network. Use the subnet calculator if you want to see exactly which private block your LAN address belongs to.
IPv4 vs IPv6: why the answer sometimes changes
If your connection has working IPv6 and your browser prefers it, you will see a long hexadecimal address like 2606:4700:4700::1111 rather than four dotted numbers. Reload on a network without IPv6 and the same browser reports an IPv4 address. Neither is wrong — you genuinely have both, and which one is used depends on Happy Eyeballs (RFC 8305), the algorithm browsers use to race an IPv6 and an IPv4 connection and keep whichever answers first.
This matters for diagnostics more than people expect. A firewall rule, an SPF record, or an allow-list written only for IPv4 will quietly fail the moment traffic switches to IPv6. If you are allow-listing your office address on a server, capture both families and add both.
Read the full explanation of what's my ip results ↓Show less ↑
Why we do not show a location
Every "IP geolocation" result is an inference, not a measurement. The good databases are commercial, licensed, and updated constantly; the free ones are frequently years stale. Even the accurate ones locate the *network*, not the person: a residential address often resolves to the ISP's regional aggregation point tens or hundreds of kilometres away, mobile carriers can place you in a different state, and anyone behind a VPN or corporate egress gateway will geolocate to the exit node.
Reading the headers table
The headers panel shows the request as our server received it. A few are worth knowing:
- X-Forwarded-For — a comma-separated chain, appended to by each proxy. The left-most entry is the original client; entries to the right are the proxies. Only trust it as far as you trust the proxies, because anything upstream can forge the left portion.
- X-Real-IP — a single address set by nginx-style front ends. Simpler than XFF, but it loses the chain.
- CF-Connecting-IP — Cloudflare's equivalent, present only when traffic passes through their network.
- User-Agent — your browser and platform. Increasingly frozen and generic for privacy reasons; do not treat it as an identity.
- Accept-Language — the languages your browser advertises. A far more reliable hint of locale than any IP-based guess.
- Via and Forwarded — set by standards-compliant proxies (RFC 7239). Their presence tells you a proxy is in the path even when it hides its address.
Common situations and what they mean
| What you see | Most likely cause | What to do |
|---|---|---|
Address starts with 100.64.–100.127. | Carrier-grade NAT (RFC 6598). Your ISP is sharing one public address between many customers. | You cannot port-forward. Ask your ISP for a public IPv4 address, or use IPv6 / a tunnel. |
| Address changes on every reload | A load-balanced VPN or corporate egress pool. | Allow-list the whole egress range, not a single address. |
| Address differs from your server's outbound IP | You are testing from a laptop, not from the server. | Run the CLI check below on the server itself. |
| No address detected at all | A proxy is stripping X-Forwarded-For. | Check the proxy config; the app cannot see past what it is given. |
| IPv6 address, but your firewall rule uses IPv4 | Happy Eyeballs picked IPv6. | Duplicate every allow-list rule for both families. |
The command-line equivalent
You do not need a website for this. The cleanest method asks a DNS resolver to tell you the address it saw your query come from — no HTTP, no third-party page, and it works on a headless server:
dig +short txt ch whoami.cloudflare @1.0.0.1
# "203.0.113.42"
# IPv6 answer specifically:
dig -6 +short txt ch whoami.cloudflare @2606:4700:4700::1111
# OpenDNS equivalent, where it is not filtered:
dig +short myip.opendns.com @resolver1.opendns.comRun this on the machine whose address you actually care about. A very common support mistake is checking the address from a workstation and then allow-listing it for a mail server or cron job that egresses from an entirely different address.
Where to go next
Once you know the address, the useful follow-ups are: reverse DNS to see whether it has a PTR record (essential if it sends mail), ASN lookup to see which network announces it, and port checker to confirm which services are reachable on it from the outside.