Open LLwanran opened 5 years ago
【IP地址范围】 0.0.0.0 ~ 255.255.255.255 包括了mask地址
【IP地址划分】
如果没有进行子网划分, A类网络的子网掩码为255.0.0.0, B类网络的子网掩码为255.255.0.0, C类网络的子网掩码为255.255.255.0, 缺省情况子网掩码为255.255.255.0
【基本思路】 要想在同一网段,必须做到网络标识相同,那网络标识怎么算呢? 各类IP的网络标识取法都是不一样的。 A类的,只取第一段。B类,只取第一、二段。C类,只取第一、二、三段。
那么要判断两个IP地址是否在同一个网段,将它们的IP地址分别与子网掩码做与运算,得到的结果为网络号,如果网络号相同,就在同一子网,否则,不在同一子网。
/** * 判断两个IP地址是否在同一个网段 * @param {[String]} addr1 [地址一] * @param {[String]} addr2 [地址二] * @param {[String]} mask [子网掩码] * @return {Boolean} [true or false] */ function isEqualIPAddress(addr1, addr2, mask) { if (!addr1 || !addr2 || !mask) { return false; } let res1 = []; let res2 = []; addr1 = addr1.split("."); addr2 = addr2.split("."); mask = mask.split("."); for (let i = 0, ilen = addr1.length; i < ilen; i += 1) { res1.push(parseInt(addr1[i]) & parseInt(mask[i])); res2.push(parseInt(addr2[i]) & parseInt(mask[i])); } if (res1.join(".") == res2.join(".")) { return true; } else { return false; } } addr1 = "172.28.4.42"; addr2 = "172.21.42.42"; mask = "255.255.255.0"; isEqualIPAddress(addr1, addr2, mask);
【IP地址范围】 0.0.0.0 ~ 255.255.255.255 包括了mask地址
【IP地址划分】
如果没有进行子网划分, A类网络的子网掩码为255.0.0.0, B类网络的子网掩码为255.255.0.0, C类网络的子网掩码为255.255.255.0, 缺省情况子网掩码为255.255.255.0
【基本思路】 要想在同一网段,必须做到网络标识相同,那网络标识怎么算呢? 各类IP的网络标识取法都是不一样的。 A类的,只取第一段。B类,只取第一、二段。C类,只取第一、二、三段。
那么要判断两个IP地址是否在同一个网段,将它们的IP地址分别与子网掩码做与运算,得到的结果为网络号,如果网络号相同,就在同一子网,否则,不在同一子网。