1. O que é IPv6?
Você pode procurar esse problema no Baidu ou no Google e obterá muitos benefícios. De fato, é principalmente resolver o problema dos endereços IPv4 insuficientes. O endereço V4 é de 32 bits, ou seja, 192.168.1.1, enquanto o endereço V6 é de 128 bits, que é muito maior que V4.
2. O IPv6 tem uma máscara de sub -rede?
Pode -se dizer que existe, ou que não existe. É porque há um prefixo no IPv6. É equivalente à máscara de sub -rede no IPv4, mas os nomes são diferentes; Dizem que não há, ou que, porque o endereço do IPv6 é muito grande, e diz -se que ele pode dar a cada areia um endereço, que desaparecerá o conceito de sub -rede e não precisará mais.
3. Endereço IPv6
O método de redação de endereço IPv6 também pode ser encontrado na Internet, para que não o listei em detalhes, geralmente da seguinte forma: 1205 :: ffff0: ffd1: 1021/120, o último 120 representa o prefixo, o que equivale à máscara de sub -rede no IPV4.
4. Como calcular o endereço IP
O método de cálculo de IPv6 e IPv4 é o mesmo. Para IPv4, por exemplo, 192.168.1.1/255.255.255.0, seu segmento de rede é calculado a partir de 192.168.1.0 ~ 192.168.1.255. Como isso é calculado? De acordo com as disposições do ISP, seu endereço inicial é: este endereço IP e máscara de sub -rede são obtidos por pouco e operação; Seu endereço final é: este endereço IP e máscara de sub -rede estão em bit ou operação.
IPv6 também é o mesmo em princípio que o IPv4. Como o prefixo IPv6 é muito longo, ele não pode ser expresso na forma de 255.255.255.0, portanto, os números geralmente são escritos diretamente, como 120 ou 128, etc. 120 significa que os primeiros 120 bits deste prefixo são todos 1 e o próximo é 0. O cálculo do endereço IPv6 é o mesmo que IPv4.
O exposto acima explicou o breve conhecimento do IPv6 e lidaremos com o site IPv6.
O URL do IPv6 precisa ser compatível com o método de compressão zero, para que o URL do IPv6 precise ser convertido. A seguir, o código de conversão JS:
função transitip (ipaddr) // endereço ipv6 completo {var ipaddress = ipaddr.split ("/"); var ipaddrs = ipaddress [0] .split (":"); if (ipaddrs.length <8) {var count = 0; for (var i = 0; i <ipaddrs.length; i ++) {if (ipaddrs [i] == "") {if (count == 1) {ipaddrs [i] = addZero (4); continuar; } ipaddrs [i] = addZero ((9-ipaddrs.length)*4); contagem ++; } else {ipaddrs [i] += ":"; }}} else if (ipaddrs.length == 8) {for (var i = 0; i <8; i ++) {ipaddrs [i]+= ":"; }} //// A conclusão acima é concluída, o conteúdo é colocado em iPaddrs, mas não é o retorno padrão initaddr (ipaddrs); // a sequência completa do endereço IP é obtida} função addZero (num) {var zerostr = ""; for (var i = 1; i <num+1; i ++) {zerostr+= "0"; if (i%4 == 0) {zerostr+= ":"; }} retornar zerostr;} função initaddr (ipaddrs) {var ipArray = ""; for (var i = 0; i <ipaddrs.length; i ++) {ipArray+= ipaddrs [i]; } if (ipArray.charat (ipArray.length-1) == ':') {ipArray = ipArray.substr (0, ipArray.Length-1); } // var ipArrays = ipArray.split (":"); // retorna ipArrays; devolver ipArray;}A expressão regular para julgamento de endereço IPv6 é:
função isipv6 (str) // julgamento de endereço IPv6 {return /:/.test(str) && str.match (/:/g) .length <8 &&/::/. test (str)? (str.match (/::/g) .length == 1 1 &&/^:: $ |^(::)? ([/da-f] {1,4} (: | ::))*[/da-f] {1,4} (::)? $/i.test (str)):/^([/da-f] {1,4}:) {7} [/da-f] {1,4} $.Em seguida, vamos explicar a conversão de IPv4 para IPv6:
A conversão de URLs IPv4 para IPv6 é muito simples. Basta converter o endereço IPv4 em formato hexadecimal, levar dois segmentos em um grupo e depois adicionar :: ffff antes dele.
O código JS é o seguinte:
Função Four2Six (FourAddr, FourMask) // IPv4 a IPv6, incluindo endereço e máscara {var reg = FourAddr.Match (/^(/d {1,2} | 1/d/d | 2 [0-4]/d | 25 [0-5])/. (/d {1,2} | 1/d/d | 2 [0-4]/d | 25 [0-5])/. (/D {1,2} | 1/d/d | 2 [0-4]/d | 25 [0-5])/. (/D {1,2} | 1/d/d | 2 [0-4]/d | 25 [0-5]) $/); if (reg == null) {alert ("endereço IP está incorreto!"); retornar; } if (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/. (255 | 254 | 252 | 248 | 240 | 224 | 192 | 128 | 0)/. 0) $ |^(255/.255/.255/. (255 | 254 | 252 | 248 | 240 | 224 | 192 | 128 | 0)) if (reg == null) {alert ("A máscara de sub -rede está incorreta!"); retornar; }} else {var Mask = parseint (FourMask, 10); if (máscara <0 || máscara> 32) {alert ("máscara de sub -rede está incorreta!"); retornar; }} /*** O método de conversão de IPv4 em IPv6 é muito simples 1. Primeiro converta cada segmento em hexadecimal 2. Adicione 0 antes de menos de dois dígitos 3. V4 produzirá um total de 4 dígitos hexadecimais, que são combinados com os primeiros primeiros e os dois últimos, respectivamente 4. "0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000: ffff:" **/ var sixtemp = ""; var FourAddrs = FourAddr.split ("."); for (var i = 0; i <FourAddrs.Length; i ++) {var addr4ip = parseint (Fouraddrs [i], 10); var addrtemp = addr4ip.toString (16); if (addrtemp.length == 1) {addrtemp = "0" + addrtemp; } sixtemp += addrtemp; if (i == 1) {sixtemp += ":"; }} // O segmento de endereço V6 gerado acima está correto sixtemp = "0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000: ffff:" + sixtemp; /*** A máscara de sub -rede pode ser processada abaixo. Existem duas maneiras de escrever máscaras de sub -rede, número ou 255.255.255.0 1. O primeiro método é relativamente simples de processar. Basta adicionar 96 (128-32) a esse valor. 2. O segundo tipo precisa ser dividido em quatro segmentos, cada segmento é convertido em binário e veja qual bit se torna 0 no início. **/ var MaskTemp = 96; if (FourMask.IndexOf (".") ==-1) {MaskTemp += parseint (FourMask); } else {var masks = FourMask.split ("."); for (var i = 0; i <Masks.length; i ++) {var Mask4iP = parseint (máscaras [i], 10); var Mask4Temp = Mask4ip.toString (2); if (Mask4Temp.Length! = 8) {for (var j = 0; j <8-mask4Temp; j ++) {Mask4Temp = "0"+Mask4Temp; }} // a seguir é uma posição var flagTemp = false; for (var j = 0; j <8; j ++) {if (Mask4Temp.Charat (j) == '0') {flagTemp = true; MaskTemp + = i*8 + j; quebrar; } if (j == 7 && i == 3) {flagTemp = true; MaskTemp = 128; quebrar; }} if (flagTemp) {break; }}} retorna sixtemp + "/" + MaskTemp;} função Four2Sixip (FourAddr) // IPv4 para IPv6, apenas para abordar {var reg = FourAddr.Match (/^(/d {1,2} | 1/d/d | 2 [0-4]/d | 25 [0-5])/. (/d {1,2} | 1/d/d | 2 [0-4]/d | 25 [0-5])/. (/D {1,2} | 1/d/d | 2 [0-4]/d | 25 [0-5])/. (/D {1,2} | 1/d/d | 2 [0-4]/d | 25 [0-5]) $/); if (reg == null) {alert ("endereço IP está incorreto!"); retornar; } var sixtemp = ""; var FourAddrs = FourAddr.split ("."); for (var i = 0; i <FourAddrs.Length; i ++) {var addr4ip = parseint (Fouraddrs [i], 10); var addrtemp = addr4ip.toString (16); if (addrtemp.length == 1) {addrtemp = "0" + addrtemp; } sixtemp += addrtemp; if (i == 1) {sixtemp += ":"; }} // O segmento de endereço v6 acima está correto sixtemp = "0000: 0000: 0000: 0000: 0000: ffff:" + sixtemp; Retornar Sixtemp;}Obviamente, o método acima inclui julgamento regular do endereço e máscara IPv4 e suporta dois tipos de máscaras na forma de 255.255.255.0 e /32.