一、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实战
拒绝背锅 运筹帷幄