IP Address Class & Range Calculator

ANALife Services AuthorityNational Calculator Authority›IP Address Class & Range Calculator

.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }

IP Address Class & Range Calculator

Enter an IPv4 address to determine its class, default subnet mask, usable host range, broadcast address, and number of hosts.

IPv4 Address

Custom Subnet Mask (optional)

Calculate

function ipCalc() { const resultDiv = document.getElementById('ip-result'); const ipStr = document.getElementById('ip-address').value.trim(); const subnetStr = document.getElementById('ip-subnet').value.trim();

// ── Validation helpers ────────────────────────────────────────────────────── function parseIP(str) { const parts = str.split('.'); if (parts.length !== 4) return null; const nums = parts.map(Number); if (nums.some(n => isNaN(n) || n 255 || String(n) !== parts[nums.indexOf(n)])) return null; return nums; }

function ipToInt(parts) { return ((parts[0] >> 0; }

function intToIP(n) { return [ (n >>> 24) & 0xFF, (n >>> 16) & 0xFF, (n >>> 8) & 0xFF, n & 0xFF ].join('.'); }

function maskFromCIDR(cidr) { if (cidr === 0) return 0; return (0xFFFFFFFF >> 0; }

function countOnes(n) { let c = 0; while (n) { c += n & 1; n >>>= 1; } return c; }

function isValidMask(parts) { const n = ipToInt(parts); // A valid mask has all 1s followed by all 0s const inv = (~n) >>> 0; return (inv & (inv + 1)) === 0; }

// ── Parse IP ──────────────────────────────────────────────────────────────── if (!ipStr) { resultDiv.innerHTML = 'Please enter an IPv4 address.

'; return; }

const ipParts = parseIP(ipStr); if (!ipParts) { resultDiv.innerHTML = 'Invalid IPv4 address. Each octet must be 0–255.

'; return; }

const firstOctet = ipParts[0];

// ── Special / reserved ranges ─────────────────────────────────────────────── let special = ''; if (firstOctet === 0) special = 'Reserved (this network)'; if (firstOctet === 127) special = 'Loopback (127.0.0.0/8)'; if (firstOctet >= 224 && firstOctet = 240) special = 'Reserved / Experimental (Class E)';

// ── Determine class & default mask ───────────────────────────────────────── let ipClass, defaultMaskInt, defaultCIDR;

if (firstOctet >= 1 && firstOctet = 128 && firstOctet = 192 && firstOctet = 224 && firstOctet 32) { resultDiv.innerHTML = 'Invalid CIDR prefix length (0–32).

'; return; } maskInt = maskFromCIDR(cidr); } else { const maskParts = parseIP(subnetStr); if (!maskParts || !isValidMask(maskParts)) { resultDiv.innerHTML = 'Invalid subnet mask. Must be a valid contiguous mask (e.g. 255.255.255.0).

'; return; } maskInt = ipToInt(maskParts); cidr = countOnes(maskInt); } } else if (defaultMaskInt !== null) { maskInt = defaultMaskInt; cidr = defaultCIDR; } else { maskInt = null; cidr = null; }

// ── Compute network info ──────────────────────────────────────────────────── const ipInt = ipToInt(ipParts); let networkAddr, broadcastAddr, firstHost, lastHost, totalHosts, usableHosts;

if (maskInt !== null) { networkAddr = (ipInt & maskInt) >>> 0; broadcastAddr = (networkAddr | (~maskInt >>> 0)) >>> 0; firstHost = cidr = 16 && ipParts[1] ';

html += IP Address${ipStr}; html += Class${ipClass}${special ? ' — *' + special + '*' : ''}; html += Private Address${isPrivate ? '✅ Yes (RFC 1918)' : '❌ No (Public)'};

if (defaultCIDR !== null) { html += Default Mask${intToIP(defaultMaskInt)} /${defaultCIDR}; }

if (maskInt !== null) { html += Applied Subnet Mask${intToIP(maskInt)} /${cidr}; html += Network Address${intToIP(networkAddr)}; html += Broadcast Address${intToIP(broadcastAddr)}; if (cidr First Usable Host${intToIP(firstHost)}; html +=Last Usable Host${intToIP(lastHost)}; } html +=Total Addresses${totalHosts.toLocaleString()}; html +=Usable Hosts${usableHosts.toLocaleString()}`; }

html += ''; resultDiv.innerHTML = html; }

// Allow Enter key to trigger calculation document.getElementById('ip-address').addEventListener('keydown', e => { if (e.key === 'Enter') ipCalc(); }); document.getElementById('ip-subnet').addEventListener('keydown', e => { if (e.key === 'Enter') ipCalc(); });

#### Formulas

Network Address = IP & Subnet Mask (bitwise AND)

Broadcast Address = Network Address | ~Subnet Mask (bitwise OR with inverted mask)

First Usable Host = Network Address + 1

Last Usable Host = Broadcast Address − 1

Total Addresses = 2(32 − CIDR prefix)

Usable Hosts = Total Addresses − 2  (subtract network & broadcast; for /31 and /32 no subtraction)

#### Assumptions & References

More Calculators

Read Next

External Review Eligibility Checker ANA › Life Services Authority › National Calculator Authority › External Review Eligibility Checker .calc-container {...

Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...

References