ipcalc
IPv4 and IPv6 subnet calculator that explains every answer, and maps IPv6 back to what you already know from IPv4.
| Subnet | Range |
|---|
This result from the API: JSON ·
Ask your own AI
Paste this into ChatGPT, Claude, Copilot or any agent. It carries the verified values above, so the agent explains instead of recomputing (agents often get :: and prefix boundaries wrong).
| IPv4 habit | IPv6 version |
|---|---|
32 bits, 4 decimal octets: 192.0.2.1 | 128 bits, 8 hex groups: 2001:db8::1; :: once replaces the longest run of zero groups |
Private 10/8, 172.16/12, 192.168/16 + NAT | Global addresses + a firewall. ULA fd00::/8 exists for internal-only use |
/24 is a typical LAN | /64 is always a LAN. A home gets a /56 (256 LANs), a site a /48 |
Netmask 255.255.255.0, wildcard 0.0.0.255 in ACLs | Only /prefix, no masks |
| CIDR and VLSM: split a block into subnets of different sizes | Same CIDR math on 128 bits, but LANs stay /64: you split the site prefix (/48, /56) into /64s, and use /127 or /128 only for links and loopbacks |
Summarize 10.0.0.0/24..10.0.3.0/24 into 10.0.0.0/22 | Same math. Plan on nibble boundaries (/48, /52, /56, /60, /64) so prefixes stay readable in hex and summarize cleanly |
| Broadcast | None. Multicast instead: ff02::1 all nodes, ff02::2 all routers |
| ARP | NDP: ICMPv6 to a solicited-node multicast group ff02::1:ffXX:XXXX |
| DHCP hands out addresses | SLAAC: the router advertises the prefix, the host picks its own interface ID. DHCPv6 optional |
169.254/16 only when DHCP fails | fe80::/10 on every interface, always |
| One address per interface | Several: link-local, global (often a stable one plus a rotating privacy one), maybe ULA |
127.0.0.1 | ::1 |
0.0.0.0 | :: |
| An IPv4 client on a dual-stack socket | ::ffff:192.0.2.1 (IPv4-mapped) |
| IPv6-only client to IPv4-only server | NAT64 + DNS64: 64:ff9b::192.0.2.1 |
Everything on this page comes from a small JSON API. No key, no sign-up. GET only, answers are cacheable.
| Request | Returns |
|---|---|
| /api/v1/calc?q=<addr[/prefix]>[&split=<n>] | Explain an address or prefix, optionally split into /n subnets (first 256 listed) |
| /api/v1/contains?net=<cidr>&ip=<addr|cidr> | Whether the address or subnet is inside the network |
| /api/v1/summarize?q=<list> | Exact summary and single supernet of up to 64 subnets (comma, space or newline separated) |
| /api/v1/me | Explain the IP you connect from |
Every answer has title, facts[] (label, value, why) and prompt; calc adds family, canonical, kind and split. Bad input returns HTTP 400 with {"error": "..."}.
# Explain a prefix, keep label and value
curl -s 'https://ipcalc.franzramadhan.dev/api/v1/calc?q=2001:db8::1/64' \
| jq '.facts[] | {label, value}'
# Is 10.0.1.77 inside 10.0.0.0/22?
curl -s 'https://ipcalc.franzramadhan.dev/api/v1/contains?net=10.0.0.0/22&ip=10.0.1.77' \
| jq -r '.facts[] | select(.label == "Result").value'
# Summarize two /24s into one route
curl -s 'https://ipcalc.franzramadhan.dev/api/v1/summarize?q=10.0.0.0/24,10.0.1.0/24' \
| jq '.facts[1].value'
Rate limit: 60 API requests per 10 seconds per IP, then blocked for 10 seconds. The service sleeps from 23:30 to 06:00 WIB. Source and docs: github.com/franzramadhan/ipcalc.