ipv4,ipv6起止地址判断,网段判断
一、ipv4
function checkIp(ip, range, mask){
var rangeArr = range.split(".");
var maskArr = mask.split(".");
var ipArr = ip.split(".");
var flag = true;
if(ipArr[3] == 0 || ipArr[3] == 255){
return false;
}
for(var i=0; i<4; i++){
if((rangeArr[i] & maskArr[i]) != (ipArr[i] & maskArr[i])){
flag = false;
break;
}
}
return flag;
}
function getIpNum(ip){
var ipArr = ip.split(".");
return parseInt(ipArr[0]*255*255*255+ipArr[1]*255*255+ipArr[2]*255+ipArr[3]);
}
二,ipv6
//转换成完全的ipv6地址
function convert2CompleteIpV6(ip){
var ipV6 = ip;
var index = ip.indexOf("::");
if(index > 0){
var size = 8-(ip.split(":").length-1);
var tmp = "";
for(var i = 0; i < size; i++){
tmp += ":0000";
}
tmp += ":";
ipV6 = ip.replace("::",tmp);
}else if(index == 0){
if(ip == "::"){
ipV6 = "0000:0000:0000:0000:0000:0000:0000:0000";
}else{
ipV6 = ip.replace("::","0000:0000:0000:0000:0000:0000:0000:");
}
}
return ipV6;
}
//将二进制掩码转换成16进制 function bin_to_hex(mask) { var hex_array = [{key:0,val:"0000"},{key:1,val:"0001"},{key:2,val:"0010"},{key:3,val:"0011"},{key:4,val:"0100"},{key:5,val:"0101"},{key:6,val:"0110"},{key:7,val:"0111"}, {key:8,val:"1000"},{key:9,val:"1001"},{key:'A',val:"1010"},{key:'B',val:"1011"},{key:'C',val:"1100"},{key:'D',val:"1101"},{key:'E',val:"1110"},{key:'F',val:"1111"}] var value = '' var list = [] var str = ''; if(parseInt(mask) != 0){ for(var i = 0; i < parseInt(mask); i++){ str += "1"; } for(var i = 0; i < (128 - parseInt(mask)); i++){ str += "0"; } } while (str.length > 4) { list.push(str.substring(0, 4)) str = str.substring(4); } list.push(str) for(var i = 0; i < list.length; i++){ for(var j = 0; j < hex_array.length; j++){ if(list[i] == hex_array[j].val){ value = value.concat(hex_array[j].key) break } } } var valArr = [] while (value.length > 4) { valArr.push(value.substring(0, 4)) value = value.substring(4); } valArr.push(value); return valArr; }
//判断两个IPv6地址大小 function compareIPv6(addr1,addr2){ var addr1 = convert2CompleteIpV6(addr1).split(":"); var addr2 = convert2CompleteIpV6(addr2).split(":"); for(var i = 0; i < 8; i++){ if(parseInt(addr1[i], 16) != parseInt(addr2[i], 16)){ if(parseInt(addr1[i], 16) > parseInt(addr2[i], 16)){//addr1 > addr2 return "1"; }else if(parseInt(addr1[i], 16) < parseInt(addr2[i], 16)){//addr1 < addr2 return "2"; } } } return "3";//地址相等 }
//比较是否同一网段 function checkIpv6 (ip, mask, range) { var flag = true; var mask = bin_to_hex(mask); var ipv6 = convert2CompleteIpV6(ip).split(":"); var range = convert2CompleteIpV6(range).split(":"); for(var i = 0; i < 8; i++){ if((parseInt(ipv6[i], 16) & parseInt(mask[i], 16)) != (parseInt(range[i], 16) & parseInt(mask[i], 16))){ flag = false; break; } } return flag; }
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄
//将二进制掩码转换成16进制 function bin_to_hex(mask) { var hex_array = [{key:0,val:"0000"},{key:1,val:"0001"},{key:2,val:"0010"},{key:3,val:"0011"},{key:4,val:"0100"},{key:5,val:"0101"},{key:6,val:"0110"},{key:7,val:"0111"}, {key:8,val:"1000"},{key:9,val:"1001"},{key:'A',val:"1010"},{key:'B',val:"1011"},{key:'C',val:"1100"},{key:'D',val:"1101"},{key:'E',val:"1110"},{key:'F',val:"1111"}] var value = '' var list = [] var str = ''; if(parseInt(mask) != 0){ for(var i = 0; i < parseInt(mask); i++){ str += "1"; } for(var i = 0; i < (128 - parseInt(mask)); i++){ str += "0"; } } while (str.length > 4) { list.push(str.substring(0, 4)) str = str.substring(4); } list.push(str) for(var i = 0; i < list.length; i++){ for(var j = 0; j < hex_array.length; j++){ if(list[i] == hex_array[j].val){ value = value.concat(hex_array[j].key) break } } } var valArr = [] while (value.length > 4) { valArr.push(value.substring(0, 4)) value = value.substring(4); } valArr.push(value); return valArr; }
//判断两个IPv6地址大小 function compareIPv6(addr1,addr2){ var addr1 = convert2CompleteIpV6(addr1).split(":"); var addr2 = convert2CompleteIpV6(addr2).split(":"); for(var i = 0; i < 8; i++){ if(parseInt(addr1[i], 16) != parseInt(addr2[i], 16)){ if(parseInt(addr1[i], 16) > parseInt(addr2[i], 16)){//addr1 > addr2 return "1"; }else if(parseInt(addr1[i], 16) < parseInt(addr2[i], 16)){//addr1 < addr2 return "2"; } } } return "3";//地址相等 }
//比较是否同一网段 function checkIpv6 (ip, mask, range) { var flag = true; var mask = bin_to_hex(mask); var ipv6 = convert2CompleteIpV6(ip).split(":"); var range = convert2CompleteIpV6(range).split(":"); for(var i = 0; i < 8; i++){ if((parseInt(ipv6[i], 16) & parseInt(mask[i], 16)) != (parseInt(range[i], 16) & parseInt(mask[i], 16))){ flag = false; break; } } return flag; }

更多精彩