为了判断两个 IP 是否在同一网段,我们需要利用 Javascript 对 IP 地址的二进制与位运算。
以下是完整的实例代码:
function isSameSubnet(ip1, ip2, mask) {
// 将 ip 地址转化为 32 位二进制数
var ip1Int = ipToInt(ip1);
var ip2Int = ipToInt(ip2);
var maskInt = maskToInt(mask);
// 用掩码进行与运算,结果相同时表示处于同一子网
return (ip1Int & maskInt) === (ip2Int & maskInt);
}
function ipToInt(ipAddress) {
var parts = ipAddress.split(".");
var sum = 0;
for (var i = 0; i < 4; ++i) {
sum += parseInt(parts[i]) << (8 * (3 - i));
}
return sum;
}
function maskToInt(mask) {
var bits = parseInt(mask);
var fullBytes = Math.floor(bits / 8);
var partialByte = (bits % 8);
var sum = 0;
for (var i = 0; i < fullBytes; ++i) {
sum += 255 << (8 * (3 - i));
}
if (partialByte > 0) {
sum += ((1 << partialByte) - 1) << (8 * (3 - fullBytes));
}
return sum;
}
上述代码包含了三个函数:
isSameSubnet
:传入两个 IP 地址和子网掩码,返回布尔值表示两个 IP 是否属于同一子网。ipToInt
:将 IP 地址转化为 32 位二进制数。maskToInt
:将子网掩码转化为 32 位二进制数。
以上函数共同完成了对两个 IP 是否属于同一子网的判断工作。
以下是两条示例说明:
- 判断同一网段的两个 IP:
假设我们要判断 192.168.1.100 和 192.168.1.200 是否属于同一子网,子网掩码为 255.255.255.0.
var ip1 = "192.168.1.100";
var ip2 = "192.168.1.200";
var mask = "255.255.255.0";
var result = isSameSubnet(ip1, ip2, mask);
console.log(result); // 输出 true
这里使用了 isSameSubnet
函数,传入了两个 IP 地址和子网掩码,最终输出 true 表示属于同一子网。
- 判断不同网段的两个 IP:
假设我们要判断 192.168.1.100 和 192.168.2.200 是否属于同一子网,子网掩码为 255.255.255.0.
var ip1 = "192.168.1.100";
var ip2 = "192.168.2.200";
var mask = "255.255.255.0";
var result = isSameSubnet(ip1, ip2, mask);
console.log(result); // 输出 false
此时输出 false 表示这两个 IP 不属于同一子网。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript 判断两个IP是否在同一网段实例代码 - Python技术站