文档库 最新最全的文档下载
当前位置:文档库 › ipv6与'掩码'计算网段

ipv6与'掩码'计算网段

如果你配置的ipv6: fff0:3::3
mask: 60

首先你要调用transitIpv6这个函数将IPV6地址补全 例如:fff0:3::3 转为 fff0:3:0:0:0:0:0:3 的形式,
再调用ipv6mask_int_to_string这个函数,把掩码60也转换成x:x:x:x:x:x:x:x的形式
最后调用ipv6_cmp,计算出网段的形式。

function check_IPv6(str) //这是检查IPV6是否合法
{
var idx = str.indexOf("::");

// there is no "::" in the ip address
if (idx == -1)
{
var items = str.split(":");
if (items.length != 8)
{
return false;
}
else
{
for (i in items)
{
if (!isHex(items[i]))
{
return false;
}
}
return true;
}
}
else
{
// at least, there are two "::" in the ip address
if (idx != https://www.wendangku.net/doc/5d3356618.html,stIndexOf("::"))
{
return false;
}
else
{
var items = str.split("::");
var items0 = items[0].split(":");
var items1 = items[1].split(":");
if ((items0.length + items1.length) > 7)
{
return false;
}
else if (items[1] == "")//如果是网段显示形式,就判断它为正确形式。例如:1:1:: 形式。
{
return true;
}
else
{
for (i in items0)
{
if (!isHex(items0[i]))
{
return false;
}
}
for (i in items1)
{
if (!isHex(items1[i]))
{
return false;
}
}
return true;
}
}
}
}

// check whether every char of the str is a Hex char(0~9,a~f,A~F)
function isHex(str)
{
if(str.length == 0 || str.length > 4)
{
return false;
}

str = str.toLowerCase();
var ch;

for(var i=0; i< str.length; i++)
{
ch = str.charAt(i);
if(!(ch >= '0' && ch <= '9') && !(ch >= 'a' && ch <= 'f'))
{
return false;
}
}
return true;
}

function transitIpv6(ipaddress)//将IPV6地址补全 例如:x:x::x 转为 x:x:0:0:0:0:0:x 的形式
{
var ipaddrs = ipaddress.split(":");
if(ipaddrs.length<8)
{
var count = 0;
for(var i=0;i{
if(ipaddrs[i]=="")
{
if(count==1)
{
ipaddrs[i] = addZero(4);
continue;
}
ipaddrs[i] = addZero((9-ipaddrs.length)*4);
count++;
}
else
{
ipaddrs[i] += ":";
}
}
}
else if(ipaddrs.length==8)
{
for(var i=0;i<8;i++)
{
ipaddrs[i] += ":";
}
}
////上述补齐完成,将内容放置于ipaddrs中,但不

标准
return initaddr(ipaddrs);//获得了ip地址的完整字符串
}

function addZero(num)
{
var zerostr = "";
for(var i=1;i{
zerostr+="0";
if(i%4==0)
{
zerostr+=":";
}
}
return zerostr;
}

//把数组形式转换为字符串的形式
function initaddr(ipaddrs)
{
var iparray ="";
for(var i=0;i{
iparray+=ipaddrs[i];
}
if(iparray.charAt(iparray.length-1)==':')
{
iparray = iparray.substr(0,iparray.length-1);
}
return iparray;
}

//把ipv6掩码(相对ipv4说的)例如:16 转换为 x:x:x:x:x:x:x:x 的形式
function ipv6mask_int_to_string(ipv6mask)
{
var first = 0;
var second = 0;
var third = 0;
var forth = 0;
var fifth = 0;
var sixth = 0;
var seventh = 0;
var eighth = 0;
var i = 0;
var mi = 0;
if(ipv6mask<0 || ipv6mask>128)
return "The mask valued " + ipv6mask + " is invalid!"
if(ipv6mask==0)
return "0:0:0:0:0:0:0:0";
else if(ipv6mask>=1&&ipv6mask<=16)
{
mi = 15;
for(i=0;i{
first += Math.pow(2,mi);
mi--;
}
second = 0;
third = 0;
forth = 0;
fifth = 0;
sixth = 0;
seventh = 0;
eighth = 0;
}
else if(ipv6mask>=17&&ipv6mask<=32)
{
first = "ffff";
mi = 15;
for(i=0;i{
second += Math.pow(2,mi);
mi--;
}
third = 0;
forth = 0;
fifth = 0;
sixth = 0;
seventh = 0;
eighth = 0;
}
else if(ipv6mask>=33&&ipv6mask<=48)
{
first = "ffff";
second = "ffff";
mi = 15;
for(i=0;i{
third += Math.pow(2,mi);
mi--;
}
forth = 0;
fifth = 0;
sixth = 0;
seventh = 0;
eighth = 0;
}
else if(ipv6mask>=49&&ipv6mask<=64)
{
first = "ffff";
second = "ffff";
third = "ffff";
mi = 15;
for(i=0;i{
forth += Math.pow(2,mi);
mi--;
}
fifth = 0;
sixth = 0;
seventh = 0;
eighth = 0;
}
else if(ipv6mask>=65&&ipv6mask<=80)
{
first = "ffff";
second = "ffff";
third = "ffff";
forth = "ffff"
mi = 15;
for(i=0;i{
fifth += Math.pow(2,mi);
mi--;
}
sixth = 0;
seventh = 0;
eighth = 0;
}
else if(ipv6mask>=81&&ipv6mask<=96)
{
first = "ffff";
second = "ffff";
third = "ffff";
forth = "ffff";
fifth = "ffff";
mi = 15;
for(i=0;i{
sixth += Math.pow(2,mi);
mi--;
}
seventh = 0;
eighth = 0;
}
else if(ipv6mask>=97&&ipv6mask<=112)

{
first = "ffff";
second = "ffff";
third = "ffff";
forth = "ffff";
fifth = "ffff";
sixth = "ffff";
mi = 15;
for(i=0;i{
seventh += Math.pow(2,mi);
mi--;
}
eighth = 0;
}
else if(ipv6mask>=113&&ipv6mask<=128)
{
first = "ffff";
second = "ffff";
third = "ffff";
forth = "ffff";
fifth = "ffff";
sixth = "ffff";
seventh = "ffff";
mi = 15;
for(i=0;i{
eighth += Math.pow(2,mi);
mi--;
}
}
return "" + first.toString(16) + ":" + second.toString(16) + ":" + third.toString(16) + ":" + forth.toString(16) + ":" + fifth.toString(16) + ":" + sixth.toString(16) + ":" + seventh.toString(16) + ":" + eighth.toString(16) + "";
}

//ipv6与掩码(相对ipv4的掩码)计算网段
function ipv6_cmp(ipv6, mask)
{
var ip_split;
var mask_split;
var flag = 0;
var i = 0;
var dest_ip = new Array();
var ip = new Array();

ip_split = ipv6.split(":");
mask_split = mask.split(":");

for ( i = 0; i < 8; i++ )
{
dest_ip[i] = parseInt(ip_split[i], 16) & parseInt(mask_split[i], 16);
}

for ( i = 0; i < 8; i++ )
{
if (dest_ip[i] == "0")
{
for ( var j = i + 1; j < 8; j++)
{
if ( dest_ip[j] != "0")
{
flag = 1;
}
}

if (flag == 0)
{
for ( var k = 0; k < i; k++ )
{
ip[k] = dest_ip[k].toString(16) + ":";
}

ip[k] = "::";
if (ip[0] == "::")
{
return ip;
}
return initaddr(ip);
}
else
{
flag =0;
}
}
}

for ( i = 0; i < 8; i++ )
{
if ( i == 7 )
{
ip[i] = dest_ip[i].toString(16);
}
ip[i] = dest_ip[i].toString(16) + ":";
}
return initaddr(ip);
}

相关文档
相关文档 最新文档