Перейти к основному содержимому
clawam tools
Инструменты Документы Daoark EN Главная Главная / Calculadora › Главная manifest.json 255 || String(v) !== parts[i].trim()) { throw new Error('每段必须是 0-255 整数'); } n = n * 256 + v; } return n >>> 0; } function longToIp(n) { n = n >>> 0; return [(n >>> 24) & 0xFF, (n >>> 16) & 0xFF, (n >>> 8) & 0xFF, n & 0xFF].join('.'); } function maskFromCidr(cidr) { if (cidr === 0) return 0; return ((0xFFFFFFFF << (32 - cidr)) >>> 0); } function maskToDotted(mask) { return longToIp(mask); } function doProcess() { try { var raw = getVal('text-a').trim(); if (!raw) { showError('请输入'); return; } var ip, cidr; if (raw.indexOf('/') >= 0) { var parts = raw.split('/'); ip = parts[0].trim(); cidr = parseInt(parts[1], 10); if (isNaN(cidr) || cidr < 0 || cidr > 32) throw new Error('CIDR 必须是 0-32'); } else if (raw.split(/\s+/).length === 2) { var p2 = raw.split(/\s+/); ip = p2[0].trim(); var dotted = p2[1].trim(); var m = ipToLong(dotted); // 计算 cidr cidr = 0; var x = m >>> 0; while ((x & 0x80000000) !== 0) { cidr++; x = (x << 1) >>> 0; } } else { // 默认 /32 ip = raw; cidr = 32; } var ipN = ipToLong(ip); var mask = maskFromCidr(cidr); var network = (ipN & mask) >>> 0; var broadcast = (network | ((~mask) >>> 0)) >>> 0; var total = cidr === 32 ? 1 : (1 << (32 - cidr)) >>> 0; var usable = cidr >= 31 ? (cidr === 32 ? 1 : 2) : (total - 2); var firstUsable = cidr >= 31 ? network : ((network + 1) >>> 0); var lastUsable = cidr >= 31 ? broadcast : ((broadcast - 1) >>> 0); var out = [ 'IP 地址: ' + longToIp(ipN), 'CIDR: /' + cidr, '子网掩码: ' + maskToDotted(mask) + ' (0x' + mask.toString(16).toUpperCase().padStart(8, '0') + ')', '通配符掩码: ' + longToIp((~mask) >>> 0), '网络地址: ' + longToIp(network), '广播地址: ' + longToIp(broadcast), '总地址数: ' + total, '可用主机数: ' + usable, '可用范围: ' + longToIp(firstUsable) + ' - ' + longToIp(lastUsable) ].join('\n'); showResult(out, 'IPv4 ' + ip + ' /' + cidr); } catch (e) { showError('计算失败: ' + (e.message || e)); } } $('btn-main').addEventListener('click', function(e) { e.preventDefault(); doProcess(); }); $('btn-clear').addEventListener('click', function() { var inputs = document.querySelectorAll('input,textarea,select'); for (var i = 0; i < inputs.length; i++) { if (inputs[i].tagName === 'SELECT') inputs[i].selectedIndex = 0; else inputs[i].value = inputs[i].defaultValue; } var ra = $('result-area'); ra.hidden = true; ra.style.display = 'none'; var em = $('error-msg'); em.hidden = true; em.style.display = 'none'; }); })();