Network Tools

IP Lookup

Look up IP geolocation, ISP, ASN and more.

What is IP Lookup?

IP lookup retrieves geolocation and network information for an IP address.

Information Provided

  • Country and city
  • ISP (Internet Service Provider)
  • Latitude and longitude
  • Timezone
  • ASN (Autonomous System Number)

Use Cases

  • Security analysis
  • Geolocation verification
  • Network troubleshooting

A single-address IP lookup: the literal address goes to the ipwho.is JSON endpoint, and the page renders country, region, city, coordinates, timezone, ISP, organisation and ASN, plus locally computed binary, hex and decimal forms when the address is IPv4. Five private IPv4 blocks and three IPv6 prefixes are answered inside the browser with no request at all.

What one lookup actually sends and receives

Pressing the button issues a plain GET to https://ipwho.is/8.8.8.8 — no key, no request body, the address sitting directly in the path. The component then maps eleven response fields: continent, country, country_code, region, city, latitude, longitude, timezone.id, and connection.isp, connection.org, connection.asn. Two consequences follow. The address printed on the result card is data.ip echoed back by the server, not the string you typed, so a loosely written IPv6 address can return in a tighter notation. And every row sits behind a v-if, so a field the service does not know vanishes entirely rather than rendering blank. A reply carrying success: false short-circuits into the red error banner with the message the service supplied.

Five IPv4 blocks and three IPv6 prefixes never leave the browser

Before any request, isPrivateIP tests the address against ranges hard-coded in the component: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.0/8 and 169.254.0.0/16, plus the literal ::1, the fe80: prefix and the fc / fd unique-local prefixes. A match returns immediately with only the address, the family and a private badge, and the copy button emits just those three lines. The gaps matter more than the list: 100.64.0.0/10 carrier-grade NAT, 0.0.0.0/8, 224.0.0.0/4 multicast, 198.18.0.0/15 benchmarking, 192.0.2.0/24 documentation space and 2001:db8::/32 are all absent, so they travel to the public API and come back as success: false, which reads like a broken lookup rather than a non-routable address.

The decimal, hex and binary rows are one 32-bit integer

Those three extra rows appear only when the family is IPv4. Binary pads each octet to eight bits and joins with dots; hexadecimal pads each octet to two uppercase digits and joins with colons; decimal evaluates (a << 24) + (b << 16) + (c << 8) + d and then >>> 0, because JavaScript bitwise operators work on signed 32-bit values and 192.168.1.1 would otherwise print negative. Octets stay in network byte order, so the hex row matches a packet capture and the decimal row is exactly the integer MySQL INET_ATON(8.8.8.8) stores. An IPv6 result shows no numeric rows: 128 bits do not fit that shift expression.

Worked example

Looking up 8.8.8.8 and reading its three numeric forms

Input
8.8.8.8
Output
IPv4 · public · decimal 134744072 · binary 00001000.00001000.00001000.00001000 · hex 08:08:08:08

The Example button loads this address verbatim. Every octet equals 8, so 8 x 2^24 + 8 x 2^16 + 8 x 2^8 + 8 lands on 134744072, and the two-digit hex of 8 is 08 four times over. The ASN row is built as AS plus the integer, so this address reads AS15169 with a Google organisation, never a bare 15169.

Limits and pitfalls

  • The private check covers exactly five IPv4 blocks and three IPv6 prefixes; 100.64.0.0/10, 0.0.0.0/8, 224.0.0.0/4 and 2001:db8:: are paid for with a remote call and surface as an error message instead of a local answer.
  • IPv6 input must be hex groups with optional :: compression: the validator rejects the IPv4-mapped ::ffff:192.0.2.1 and the zone suffix in fe80::1%en0, both of which operating system tools print routinely.
  • IPv4 validation only bounds each part to 0–255, so 010.0.0.1 and 08.08.08.08 pass locally even though C libraries read a leading zero as octal; the failure then arrives from the remote endpoint.
  • One literal address per query: hostnames, CIDR blocks and start-end ranges are refused before the request, because nothing in the component resolves DNS or walks a prefix.
  • Binary, hex and decimal exist for IPv4 only, so an IPv6 result shows the location and network cards with no numeric rows at all.

Related tools

When it goes wrong

The spinner keeps turning and the Lookup button stays greyed out, minutes after I clicked.

CauseThe request is a bare fetch with no AbortController and no timer, and loading is reset only in the finally block. Until the browser decides the connection is dead the promise stays pending, so the button stays disabled — and Clear does not touch loading, so it cannot call the request off either.

FixReload the page: no state is persisted, so the spinner and the disabled button reset at once. To check whether the endpoint is reachable at all, run curl -s https://ipwho.is/1.1.1.1 in a terminal before retrying here.

Get My IP fails with its own red banner, yet the same address pasted by hand looks up fine.

CauseThat button talks to a second host, https://api.ipify.org?format=json, before any geo lookup happens, and only a failure of that call produces this particular sentence. So ipwho.is being reachable says nothing about ipify: an extension, DNS filter or proxy that blocks only the ipify host is enough to break the button while manual lookups keep working.

FixOpen https://api.ipify.org?format=json in a tab, copy the value of its ip field into the input and press Lookup. You get the same result card, minus the dependency on that second host.

The error banner suddenly speaks English in the middle of a Chinese page.

CauseWhen the reply carries success: false the component assigns data.message directly to the banner, bypassing the i18n keys entirely. The translated string only appears when the service omits a message, which is why the wording changes between errors.

FixRead that sentence as the service speaking, not the page: it usually means the address is unroutable or outside the dataset. Confirm by looking up 8.8.8.8 on the same page — if that renders normally, the endpoint and your network are fine.

The copied text stops short of the coordinates, and the location card has no Coordinates row either.

CauseBoth the card and the copy routine guard that pair with a truthiness test, v-if="ipInfo.latitude && ipInfo.longitude" in one place and if (info.latitude && info.longitude) in the other. A latitude or longitude of exactly 0 is falsy, so a genuine value on the equator or the prime meridian drops the whole row instead of printing 0.

FixOpen https://ipwho.is/ followed by your address in a browser tab and read latitude and longitude from the raw JSON. A 0 there is a real coordinate, not a missing field.

I typed a different address into the field, but the binary, hex and decimal rows still show the previous one.

CauseAll three rows are computed from ipInfo.value.ip, the snapshot of the last successful result, not from the input model. Editing ipInput only prepares the next request; nothing recomputes until a lookup succeeds, so the conversion card and the location card keep describing the old address.

FixPress Enter or click Lookup again — the three rows follow the new result on the same render. Read the IP address line on the top card before trusting the numbers; it echoes what the service returned for the last request.

One literal address per lookup: when that is the wrong shape of query

SituationThis lookup pageWhere to go instead
You have a hostname, such as www.example.com, and want to know where it pointsThe pre-flight check accepts a dotted quad or an IPv6 literal only, so a name is refused with the invalid-format banner and no request is ever sent.Resolve it first with the DNS lookup tool (A and AAAA records), then paste the returned address here. Nothing in this component resolves names for you, so the two steps stay separate by design.
You want the mask, prefix length or usable host count for the address you just looked upThe result has eleven mapped fields and three numeric rows, none of which mention a mask, a prefix length or a host count — the address is treated as a single host.Subnet Calculator takes 10.0.0.14/26 and returns network address, mask and usable hosts. Use this page for who owns the address, that one for what the surrounding block looks like.
Forty addresses to check before a firewall or geo-block changeOne literal address per click, typed or pasted by hand: no file input, no URL parameter, no result the page remembers, and every public address costs one live GET.Loop the same endpoint from a shell — curl -s https://ipwho.is/1.1.1.1 returns the JSON the page consumes, keyless, address in the path. Save the page for checking a single suspicious answer by eye.
The machine is air-gapped, or you look up IPs thousands of times a dayEvery public address is a request to a shared public endpoint from the browser, with no local database and no cache between lookups.Download the MaxMind GeoLite2 City or Country database and query the local .mmdb file from a script; re-fetch the file whenever MaxMind publishes an update. Come back here only when you need one lookup and no install.
You need the registrant, the abuse contact or the allocation dateThe network card prints ISP, organisation and an ASN assembled as AS plus the integer from connection.asn; registry names, abuse mailboxes and allocation dates are never fetched.Run whois -h whois.arin.net 8.8.8.8, or open the WHOIS tool on this site. ASN from this page is a good starting key: query the AS first, then the specific netblock.
You only want to see your own exit addressThe Get My IP button first calls api.ipify.org, fills the field, then immediately calls ipwho.is — two hosts must both be reachable before any card appears.If a privacy extension or corporate filter blocks one of those hosts, curl -s https://api.ipify.org prints the bare address with no geography step involved.

Frequently Asked Questions

How accurate is IP geolocation?
City-level accuracy is probabilistic: databases combine registry data and mining, usually reaching city level, but mobile networks, corporate egress points, and CDN nodes drift significantly. Fine for coarse risk checks and personalization — never for precise定位 or enforcement.
Why does my own IP show the wrong city or ISP?
Three usual reasons: a VPN or proxy (you see the exit IP’s location), mobile carrier IP pools reused across cities, or database lag. It is not a tool bug — cross-check another source; differences are data-source differences.
Does looking up my IP hurt privacy?
Queries go over HTTPS and only transmit the IP you type. The "detect my IP" feature does contact an IP service, which necessarily sees your egress IP — that is how the feature works. If that concerns you, type the target IP manually instead.

Content reviewed: