Oh MyUtils

IP子网计算器 - IPv4和IPv6 CIDR计算器 在线工具

计算IPv4和IPv6的子网掩码、网络地址、广播地址和IP范围。免费在线CIDR计算器 — 100%客户端处理,无数据发送到服务器。

计算结果

网络地址
192.168.1.0
广播地址
192.168.1.255
子网掩码
255.255.255.0
通配符掩码
0.0.0.255
CIDR表示法
/24
第一个可用主机
192.168.1.1
最后一个可用主机
192.168.1.254
总地址数
256
可用主机数
254
IP类别
Class C
地址类型
私有 (RFC 1918)

常见问题

IP子网计算器是什么,它能做什么?

IP子网计算器是一个工具,输入IP地址和子网掩码(或CIDR前缀长度),即可计算详细的网络信息。它计算网络地址、广播地址、可用主机范围、总地址数、通配符掩码和IP类别。支持IPv4(32位)和IPv6(128位)地址。网络工程师使用它来规划IP分配、设计子网、配置路由器和防火墙以及排除连接问题。

如何使用这个IP子网计算器工具?

根据网络协议选择IPv4或IPv6选项卡。输入IP地址(如IPv4的192.168.1.100或IPv6的2001:db8::1)。输入CIDR前缀长度(如IPv4的24或IPv6的64)。结果会立即计算显示网络地址、广播地址、可用主机范围等。点击任何结果旁边的复制按钮即可复制到剪贴板。

我的数据安全吗?会发送到服务器吗?

绝对安全。此IP子网计算器100%在您的浏览器中使用客户端JavaScript运行。任何IP地址或计算结果都不会传输到任何服务器。所有运算使用JavaScript位运算(IPv4)和BigInt(IPv6)在本地执行。您可以放心地计算生产网络的子网。

什么是CIDR表示法?它与子网掩码有什么关系?

CIDR(无类域间路由)表示法是一种紧凑表示IP地址及其网络前缀的方式。写作IP/前缀(如192.168.1.0/24)。前缀数字表示地址中有多少位定义网络部分。对于IPv4,/24前缀对应子网掩码255.255.255.0(24位设为1,8位设为0)。CIDR取代了旧的分类地址系统,实现了更灵活高效的IP地址空间分配。

IPv4和IPv6子网划分有什么区别?

IPv4使用32位地址(如192.168.1.1),前缀长度/0到/32,支持约43亿个地址。IPv6使用128位地址(如2001:db8::1),前缀长度/0到/128,支持约3.4×10^38个地址。IPv4子网有网络地址和广播地址,减少2个可用主机,而IPv6不使用广播(使用组播)。标准IPv6子网大小为/64,每个子网提供2^64个地址。

什么是通配符掩码?什么时候使用?

通配符掩码是子网掩码的按位取反。例如子网掩码255.255.255.0的通配符掩码是0.0.0.255。主要用于Cisco IOS路由器的ACL(访问控制列表)和OSPF路由协议配置。通配符掩码中0位表示「必须匹配」,1位表示「任意」。此工具会自动计算通配符掩码。

什么是私有IP地址?如何识别?

私有IP地址是RFC 1918定义的保留范围,不在公共互联网上路由。用于本地网络(家庭、办公室、数据中心)。三个私有IPv4范围是:10.0.0.0/8(A类,1670万)、172.16.0.0/12(B类,100万)和192.168.0.0/16(C类,65,536)。此工具自动检测并标记输入的IPv4地址是私有还是公共。

代码示例

// IP Subnet Calculator in JavaScript

function ipv4ToInt(ip) {
  const parts = ip.split('.').map(Number);
  return ((parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8) | parts[3]) >>> 0;
}

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

function calculateSubnet(ip, cidr) {
  const ipInt = ipv4ToInt(ip);
  const mask = cidr === 0 ? 0 : (~0 << (32 - cidr)) >>> 0;
  const wildcard = (~mask) >>> 0;
  const network = (ipInt & mask) >>> 0;
  const broadcast = (network | wildcard) >>> 0;
  const totalAddresses = Math.pow(2, 32 - cidr);
  const usableHosts = cidr >= 31 ? (cidr === 32 ? 1 : 2) : totalAddresses - 2;

  return {
    networkAddress: intToIpv4(network),
    broadcastAddress: intToIpv4(broadcast),
    subnetMask: intToIpv4(mask),
    wildcardMask: intToIpv4(wildcard),
    firstUsable: intToIpv4(cidr >= 31 ? network : network + 1),
    lastUsable: intToIpv4(cidr >= 31 ? broadcast : broadcast - 1),
    totalAddresses,
    usableHosts,
  };
}

// Example
const result = calculateSubnet('192.168.1.100', 24);
console.log('Network:', result.networkAddress);    // 192.168.1.0
console.log('Broadcast:', result.broadcastAddress); // 192.168.1.255
console.log('Mask:', result.subnetMask);            // 255.255.255.0
console.log('Hosts:', result.usableHosts);          // 254

相关工具