参考地址:js校验ip、子网掩码、网关的合法性
// (掩码,ip)
// 掩码可以是数字类型也可以是ip类型
// 返回一个boolean,掩码是否与ip一致
function matchMask(mask, ip) {
let checkMask = mask;
if(!isNaN(Number(mask))){
checkMask = getMaskIp(mask).join(".")
}
return ipToint(checkMask) & ipToint(ip)
}
// 掩码数字转ip
function getMaskIp(number){
let tmpvar = parseInt(number, 10);
let cform = [0,0,0,0];
if (tmpvar >= 8) {
cform[0] = 255;
tmpvar -= 8;
} else {
cform[0] = h_fillbitsfromleft(tmpvar);
return cform
}
if (tmpvar >= 8) {
cform[1] = 255;
tmpvar -= 8;
} else {
cform[1] = h_fillbitsfromleft(tmpvar);
return cform
}
if (tmpvar >= 8) {
cform[2] = 255;
tmpvar -= 8;
} else {
cform[2] = h_fillbitsfromleft(tmpvar);
return cform
}
cform[3] = h_fillbitsfromleft(tmpvar);
return cform
}
function h_fillbitsfromleft(num) {
if (num >= 8) {
return (255);
}
let bitpat = 0xff00;
while (num > 0) {
bitpat = bitpat >> 1;
num--;
}
return (bitpat & 0xff);
}
// 直接判断掩码与数字是否一直
function ipToint(ip) {
var num = 0;
ip = ip.split(".");
num = Number(ip[0]) * 256 * 256 * 256 + Number(ip[1]) * 256 * 256 + Number(ip[2]) * 256 + Number(ip[3]);
num = num >>> 0;
return num;
}
用法
let matchGw = util.matchMask(this.netForm.mask, gateway)
let match_ip = util.matchMask(this.netForm.mask, ip)
matchGw === match_ip ? ‘匹配’ : ‘不匹配’