1. ¿Qué es IPv6?
Puede buscar este problema en Baidu o Google, y obtendrá muchos beneficios. De hecho, es principalmente para resolver el problema de las direcciones IPv4 insuficientes. La dirección V4 es de 32 bits, es decir, 192.168.1.1, mientras que la dirección V6 es de 128 bits, que es mucho más grande que V4.
2. ¿IPv6 tiene una máscara de subred?
Se puede decir que hay, o que no hay. Es porque hay un prefijo en IPv6. Es equivalente a la máscara de subred en IPv4, pero los nombres son diferentes; Se dice que no hay, o aquello, porque la dirección de IPv6 es demasiado grande, y se dice que puede dar una dirección a cada arena en la tierra, lo que desvanecerá el concepto de subred y ya no la necesitará.
3. Dirección IPv6
El método de redacción de direcciones IPv6 también se puede encontrar en Internet, por lo que no lo enumeraré en detalle, generalmente de la siguiente manera: 1205 :: FFFF0: FFD1: 1021/120, el último 120 representa el prefijo, que es equivalente a la máscara de subred en IPV4.
4. Cómo calcular la dirección IP
El método de cálculo de IPv6 e IPv4 es el mismo. Para IPv4, por ejemplo, 192.168.1.1/255.255.255.0, entonces su segmento de red se calcula a partir de 192.168.1.0 ~ 192.168.1.255. ¿Cómo se calcula esto? De acuerdo con las disposiciones del ISP, su dirección inicial es: esta dirección IP y máscara de subred se obtienen por bit y operación; Su dirección final es: esta dirección IP y la máscara de subred están en bit u funcionamiento.
IPv6 también es el mismo en principio que IPv4. Debido a que el prefijo IPv6 es demasiado largo, no se puede expresar en forma de 255.255.255.0, por lo que los números generalmente se escriben directamente, como 120 o 128, etc. 120 significa que los primeros 120 bits de este prefijo son todos 1, y el siguiente es 0. Este prefijo es equivalente a la máscara de subred en IPV4. El cálculo de la dirección IPv6 es el mismo que IPv4.
Lo anterior ha explicado el breve conocimiento de IPv6, y trataremos con el sitio web de IPv6.
La URL de IPv6 debe ser compatible con el método de compresión cero, por lo que la URL de IPv6 debe convertirse. El siguiente es el código de conversión JS:
función transitip (iPaddr) // dirección ipv6 completa {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); contar ++; } else {ipaddrs [i] += ":"; }}} else if (ipaddrs.length == 8) {for (var i = 0; i <8; i ++) {ipaddrs [i]+= ":"; }} //// La finalización anterior se completa, el contenido se coloca en iPadDRS, pero no es un retorno estándar initaddr (ipaddrs); // se obtiene la cadena completa de la dirección IP} function addzero (num) {var zerostr = ""; for (var i = 1; i <num+1; i ++) {zerostr+= "0"; if (i%4 == 0) {Zerostr+= ":"; }} return zerostr;} función 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 (":"); // devolver iparrays; devolver iparray;}La expresión regular para el juicio de la dirección de IPv6 es:
función isIpv6 (str) // ipv6 dirección juicio {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} $/i.test (str);}A continuación, expliquemos la conversión de IPv4 a IPv6:
La conversión de URL IPv4 a IPv6 es muy simple. Simplemente convierta la dirección IPv4 en formato hexadecimal, tome dos segmentos en un grupo y luego agregue :: FFFF antes.
El código JS es el siguiente:
Función Four2Six (FourAddr, FourMask) // IPv4 a IPv6, incluida la dirección y la 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) {alerta ("La dirección IP es incorrecta!"); devolver; } if (cuatromask.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) {alerta ("¿La máscara de subred es incorrecta!"); devolver; }} else {var máscara = parseInt (cuatromask, 10); if (máscara <0 || máscara> 32) {alert ("¿La máscara de subred es incorrecta!"); devolver; }} /*** El método de convertir IPv4 a IPv6 es muy simple 1. Primero convierta cada segmento en hexadecimal 2. Agregue 0 antes de menos de dos dígitos 3. V4 producirá un total de 4 dígitos hexadecimales, que se combinan con los dos primeros y los dos últimos respectivamente 4. "0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000: ffff:" **/ var sestemp = ""; 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 += ":"; }} // El segmento de direcciones V6 generado anteriormente es correcto Sixtemp = "0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000: ffff:" + Sixtemp; /*** La máscara de subred se puede procesar a continuación. Hay dos formas de escribir máscaras de subred, número o 255.255.255.0 1. El primer método es relativamente simple de procesar. Simplemente agregue 96 (128-32) a este valor. 2. El segundo tipo debe dividirse en cuatro segmentos, cada segmento se convierte en binario y vea qué bit se convierte en 0 al principio. **/ var Masktemp = 96; if (cuatromask.indexof (".") ==-1) {Masktemp += parseInt (cuatromask); } else {var máscaras = cuatromask.split ("."); for (var i = 0; i <masks.length; i ++) {var mascarark4ip = parseInt (máscara [i], 10); var máscara4temp = mask4ip.ToString (2); if (mask4temp.length! = 8) {for (var j = 0; j <8-Mask4temp; j ++) {Mask4temp = "0"+Mask4temp; }} // La siguiente es una posición var flagTemp = false; for (var j = 0; j <8; j ++) {if (mask4temp.charat (j) == '0') {flagTemp = true; Masktemp + = i*8 + j; romper; } if (j == 7 && i == 3) {flagTemp = true; Masktemp = 128; romper; }} if (flagTemp) {break; }}} return Sixtemp + "/" + Masktemp;} function Four2Sixip (FourAddr) // IPv4 a IPv6, solo para la dirección {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) {alerta ("La dirección IP es incorrecta!"); devolver; } 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 += ":"; }} // El segmento de dirección V6 anterior es correcto Sixtemp = "0000: 0000: 0000: 0000: 0000: FFFF:" + Sixtemp; return sixtemp;}Por supuesto, el método anterior incluye el juicio regular de la dirección y la máscara IPv4, y admite dos tipos de máscaras en forma de 255.255.255.0 y /32.