Detecting your address...
This page shows the public IP address your connection uses right now, together with the ISP that owns it and an estimated location. If your connection has both an IPv4 and an IPv6 address, both are shown, because a dual-stack browser only ever reveals one of them to a given site. We do not save the result; our API's request logs keep your IP for a few days (see the privacy policy). Use it to fill in a firewall allowlist, confirm a VPN is working, or check whether you are on IPv6.
Detecting your address...
Every device on your home or office network has a private address such as 192.168.1.20, handed out by the router. Those addresses are not routable on the internet. When you open a website, the router replaces the private address with the single public one your ISP assigned, which is what this page shows and what every website, game server and API sees.
Most connections today have both. When a site is reachable over both protocols, the browser picks IPv6 and the site only sees that address. To show the other one as well, the page makes two small extra requests to hosts that exist only on IPv4 or only on IPv6, so each can reveal one family. A box that says not available means your network has no route for that protocol, which is normal for many home routers on IPv6 and for some mobile carriers on IPv4.
There is no GPS involved. The city and country come from where the address block is registered and how it is routed. For a fixed line that is usually the right city. For mobile data the carrier often concentrates traffic in a regional hub, so the city can be wrong while the country is still right.
# Plain text, nothing else
curl -s https://webdevutility.com/api/ip | jq -r .ip
# Full JSON with location and ISP
curl -s https://webdevutility.com/api/ip Local addresses come from the OS instead: ip addr on Linux, ipconfig on Windows, ifconfig on macOS.
const res = await fetch("https://webdevutility.com/api/ip");
const { ip, version, location, network } = await res.json();
console.log(ip, version, location.city, location.country, network.organization); A browser cannot read its own public IP from JavaScript. Some service on the other end has to echo the address it saw, which is what this endpoint does.
import requests
data = requests.get("https://webdevutility.com/api/ip", timeout=5).json()
print(data["ip"], data["version"])
print(data["location"]["city"], data["location"]["country"])
print(data["network"]["organization"], data["network"]["asn"]) This tool follows the specifications below. Read them when you need the exact normative wording, for example to settle an edge case between two implementations.
Public. It is the address the rest of the internet sees for your connection, assigned by your ISP or VPN. Your private address, such as 192.168.1.20, only exists inside your home or office network and is never shown to websites.
Because your connection has both. Browsers prefer IPv6 when a site offers it, so a dual-stack site only ever sees one of your addresses. The page therefore checks each protocol separately and shows what it finds. If one box says not available, your network has no route for that protocol, which is common for IPv6 on older home routers.
Location is estimated from the IP block's registration and routing data, not from GPS. Mobile carriers and large ISPs often route traffic through a hub in another city, and a VPN shows its exit server. Country is reliable, city is approximate.
The location, ISP and ASN come from the request itself as it reaches Cloudflare's edge, from routing data and a geolocation estimate for the IP. The IPv4 and IPv6 boxes come from two tiny probes to single-protocol hosts, which return only the address they saw. Nothing is stored.
Most home and mobile connections get a dynamic address that can change when the router reconnects or after a lease expires, usually days to weeks. Business lines and servers often have a static IP. If you need a fixed address for an allowlist, ask your ISP for a static one or use a VPN with a dedicated IP.
Find out who owns an address with the WHOIS lookup, check what your resolver should return with the DNS propagation checker, or see how your browser identifies itself with the user agent parser.