惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
G
Google Developers Blog
B
Blog
Engineering at Meta
Engineering at Meta
阮一峰的网络日志
阮一峰的网络日志
The Register - Security
The Register - Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 叶小钗
The Cloudflare Blog
The Hacker News
The Hacker News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
雷峰网
雷峰网
F
Fortinet All Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
A
About on SuperTechFans
量子位
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
H
Help Net Security
Help Net Security
Help Net Security
P
Palo Alto Networks Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Troy Hunt's Blog
W
WeLiveSecurity
V
Vulnerabilities – Threatpost
T
The Exploit Database - CXSecurity.com
Know Your Adversary
Know Your Adversary
Apple Machine Learning Research
Apple Machine Learning Research
Scott Helme
Scott Helme
N
News | PayPal Newsroom
AWS News Blog
AWS News Blog
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
MongoDB | Blog
MongoDB | Blog
B
Blog RSS Feed
腾讯CDC
J
Java Code Geeks
Microsoft Azure Blog
Microsoft Azure Blog
TaoSecurity Blog
TaoSecurity Blog
GbyAI
GbyAI
Y
Y Combinator Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
D
Docker

博客园 - rainbow727

ps-图层调整大小 js 根据关键字,进行mark背景色标记 时间戳转换为时间格式 ps-图层尺寸缩放 ps-窗口缩放比例调整 bug Extjs小例子 ps-填充色 jq 数组对象,重复数据进行合并 HTML li标签排列有空白间隙 Ext.js知识点纪要 PHP 文件内容处理 知识点小纪要 function函数 常用正则表达式 正则表达式的字符含义 邮箱正则表达式 jQuery相关面试题 js继承
ipv4,ipv6起止地址判断,网段判断
rainbow727 · 2019-04-09 · via 博客园 - rainbow727

一、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;

}