Javascript获取IP的方式是IPv6检查。

1。什么是IPv6

这个问题可以在百度或眉目传情。应该会有很多收获。其实,主要是解决IPv4地址不足的问题。V4的地址是32位,即192.168.1.1,而V6的地址是128位,这是远高于V4。

2。IPv6有子网掩码吗

可以说,也可以说不,就说吧,因为在IPv6语句中有一个前缀,它相当于IPv4中的子网掩码,只是不一样的名字;说不,也可以,因为IPv6地址太大了,它可以给地球上的每一个地址,这将淡化子网的概念,不需要。

3,IPv6地址

IPv6地址写也可以在互联网上找到很多,其中许多没有详细列出。这是一般如下:1205::fff0:ffd1:1021 / 120,后者是120字头,这相当于IPv4中的子网掩码。

4、ip地址计算方法

IPv6和IPv4段计算在相同的方式为IPv4,如192.168.1.1 / 255.255.255.0,那么它的部分是从~ 192.168.1.255 192.168.1.0,这就是根据ISP的规定,它的起始地址:获得IP地址和子网掩码的按位操作的地址;终止:把IP地址和子网掩码(不包括点或方法的符号位)。

IPv6是IPv4的理论一样,因为IPv6前缀太长了,所以不能在255.255.255.0形式表示,所以它通常直接写数字,如120或128.120的前120位代表这个前缀是1,和下一个是0,这相当于在IPv4和IPv6地址的子网掩码是IPv4一样。

上面介绍了IPv6的简要知识,并对下面的IPv6 URL进行了处理。

IPv6的URL写入需要与零压缩兼容,所以您需要转换IPv6 URL,下面是js转换代码:


功能transitip(ipaddr) / / IPv6地址将完成
{
VaR的IP地址= ipaddr.split( / );
无功ipaddrs = IPAddress { 0 }。分裂(:);
如果(ipaddrs。长度<8)
{
var计数= 0;
对于(var i = 0;i < ipaddrs.length;i++)
{
如果(ipaddrs {我} = =)
{
如果(计数= 1)
{
我ipaddrs { } = addzero(4);
继续;
}
我ipaddrs { } = addzero((9-ipaddrs。长度)×4);
计数+;
}
其他的
{
= ipaddrs {我} ;
}
}
}
如果(ipaddrs。长度= = 8)
{
对于(var i = 0;i < 8;i + +)
{
= ipaddrs {我} ;
}
}
完成/完成,将放在ipaddrs的内容,但没有标准
返回initaddr(ipaddrs); / /得到完整的字符串的IP地址
}
功能addzero(努姆)
{
无功zerostr = ;
对于(var i = 1;i < 1 +;i + +)
{
zerostr + =0;
如果(i = 4 = 0)
{
zerostr + =:;
}
}
返回zerostr;
}
功能initaddr(ipaddrs)
{
无功iparray = ;
对于(var i = 0;i < ipaddrs.length;i++)
{
iparray + = ipaddrs {我};
}
如果(iparray.charat(iparray。length-1)= =:)
{
iparray = iparray.substr(0,iparray。length-1);
}
/ /无功iparrays = iparray.split();
/ /返回iparrays;
返回iparray;
}



IPv6地址判断的正则表达式是:


功能isipv6(STR) / / IPv6地址判断
{
返回:测试(STR)
str.match( /::: / g)的长度小于8。
:(测试)
(str.match( /:::: / g)长度= = 1。
/ ^:|美元^(::)({ } { } da-f 1(:::|)(* { da-f } {二}):|::$ / i.test)(STR))
({ } { } da-f 1:{ 7 } { } { } da-f 1美元/ i.test): / ^(STR);
}


然后,我们解释了IPv4到IPv6的转换:

IPv4到IPv6 URL的转换非常简单。把IPv4地址为116进制格式,两段为一组,然后添加前::FFFF

js代码如下所示:


功能four2six(fouraddr,fourmask) / / IPv4到IPv6,包括地址和掩码
{
Var (reg = fouraddr.match / ^ (d{1,2}|1dd|2{0-4}d|25{0-5}). ( D {1,2} | 1 D D | 2 { 0 } D | 25 { 0 })。( D {1,2} | 1 D D | 2 { 0 } D | 25 { 0 })( D {1,2} | 1 D D | 2 { 0 } D | 25 { 0 }) /。);
如果(= NULL)
{
警报(IP地址不正确)!;
返回;
}
如果(fourmask.indexof(。!= 1)
{
Reg(= fourmask.match / ^(254 | 252 | 248 | 240 | 224 | 192 | 128 | 0) 0 0 。0美元| ^(255 。(254 | 252 | 248 | 240 | 224 | 192 | 128 | 0) 0 0(255 255 。)(254 | ^ |美元252 248 240 224 | | | | | | 192 128 0 0(255) 。255 255 。)| ^美元($ / 255 254 252 248 | | | | 240 | 224 | 192 | 128 | 0)));
如果(= NULL)
{
警报(不正确的子网掩码);
返回;
}
}
其他的
{
VaR的面具= parseInt(fourmask,10);
如果(面具32)
{
警报(不正确的子网掩码);
返回;
}
}
/
IPv4转IPv6的方式很简单。
1,首先把每个部分改为16。
2。在少于两个的前面加0。
3、V4将共产生4个16位数的数字,这是一个组合的第一个和最后一个。
4。添加0000:0000:0000:0000:0000:FFFF:地址的前面
**
无功sixtemp = ;
无功fouraddrs = fouraddr.split(,);
对于(var i = 0;i < fouraddrs.length;i++)
{
无功addr4ip = parseInt(fouraddrs {我},10);
无功addrtemp = addr4ip.tostring(16);
如果(addrtemp。长度= = 1)
{
addrtemp =0+ addrtemp;
}
sixtemp = addrtemp;
如果(i = 1)
{
= sixtemp ;
}
}
上述V6正确的地址
sixtemp =0000:0000:0000:0000:0000:FFFF:+ sixtemp;
/
下面的子网掩码,子网掩码可以有两种文字、数字或255.255.255.0
1。处理第一种是简单的,只是这个值加96(128-32)。
2,第二类需要分为四个部分,每个部分为2个,看看哪一个首先被更改为0个。
**
无功masktemp = 96;
如果(fourmask.indexof(,)= = 1)
{
masktemp = parseInt(fourmask);
}
其他的
{
VaR的面具= fourmask.split(,);
对于(var i = 0;i < masks.length;i++)
{
无功mask4ip = parseInt(面具{我},10);
无功mask4temp = mask4ip.tostring(2);
如果(mask4temp.length!= 8)
{
对于(var j = 0;J < 8-mask4temp;j++)
{
mask4temp =0+ mask4temp;
}
}
法官的立场
无功flagtemp = false;
对于(var j=0;j<8;j + +)
{
如果(mask4temp.charat(j)= = '0')
{
flagtemp =真;
masktemp =我* 8 + J;
打破;
}
如果(J = = 7i = = 3)
{
flagtemp =真;
masktemp = 128;
打破;
}
}
如果(flagtemp)
{
打破;
}
}
}
返回sixtemp +/+ masktemp;
}
功能four2sixip(fouraddr) / / IPv4转向IPv6,只有转移地址
{
Var(Reg = fouraddr.match / ^( D {1,2} | 1 D D | 2 { 0 } D | 25 { 0 })。( D {1,2} | 1 D D | 2 { 0 } D | 25 { 0 })。( D {1,2} | 1 D D | 2 { 0 } D | 25 { 0 })( D {1,2} | 1 D D | 2 { 0 } D | 25 { 0 }) /。);
如果(= NULL)
{
警报(IP地址不正确)!;
返回;
}
无功sixtemp = ;
无功fouraddrs = fouraddr.split(,);
对于(var i = 0;i < fouraddrs.length;i++)
{
无功addr4ip = parseInt(fouraddrs {我},10);
无功addrtemp = addr4ip.tostring(16);
如果(addrtemp。长度= = 1)
{
addrtemp =0+ addrtemp;
}
sixtemp = addrtemp;
如果(i = 1)
{
= sixtemp ;
}
}
上述V6正确的地址
sixtemp =0000:0000:0000:0000:0000:FFFF:+ sixtemp;
返回sixtemp;
}


当然,上述方法包括IPv4地址和掩码255.255.255.0的常规判断,在形式的支持面具和 / 32两种形式。