Я хочу создать script, который будет использовать диапазон ipv6 или cidr в качестве входных данных, и выплюнуть список из /64 блоков (или первого IP-адреса в каждом блоке /64).
У меня есть функция, которая делает что-то похожее для IPv4 IP, но мне не хватает понимания, чтобы повторно использовать ее для ipv6.
Function BreakTo30($CIDR)
{
$CIDR = explode("/", $CIDR); // this breaks the CIDR block into octlets and /notation
$octet = ip2long($CIDR[0]); //turn the first 3 octets into a long for calculating later
$NumberOf30s = pow(2,(30-$CIDR[1]))-1; //calculate the number of /30s in the CIDR block
$OutputArray = array();
for ($i=-4; $i<4 * $NumberOf30s; $OutputArray[] = (long2ip($octet + ($i += 4)))); //fancy math to output each /30
return $OutputArray; //returns an array of ranges
}
ip2long и long2ip - только ipv4.