X-Git-Url: http://git.harvie.cz/?a=blobdiff_plain;f=php%2Fipv6wildcard.php;h=458b3b3e61b0fb195c038210320f154257c8a738;hb=f6f4142a4b59346ccb7d5f63bd1173fdd13a713d;hp=15c3ad588861c5641f92c241e7b253a3ebfaa4d1;hpb=85bedcf1a82b8f35ec66de1960b618f554d74181;p=mirrors%2FPrograms.git diff --git a/php/ipv6wildcard.php b/php/ipv6wildcard.php old mode 100644 new mode 100755 index 15c3ad5..458b3b3 --- a/php/ipv6wildcard.php +++ b/php/ipv6wildcard.php @@ -1,10 +1,15 @@ +#!/usr/bin/php + * * Given IPv6 address and prefix creates array of * wildcard suffixed * addresses to be used for as reverse DNS records */ function ipv6_prefix2wildcards($address, $prefix) { + //Special case of /0 prefix + if($prefix == 0) return ['*']; //Parse ip and prefix echo("IPv6 prefix: ".$address."/".$prefix."\n"); @@ -13,9 +18,10 @@ function ipv6_prefix2wildcards($address, $prefix) { $a = gmp_import($addr); //Separate maskable octets - $pref_hex = ceil($pref / 4)*4; //Prefix rounded up to full octets - $pref_rem = $pref_hex - $pref; //Remainder of prefix - echo("Rounding prefix: ".$pref_hex."-".$pref_rem."\n"); + $pref_hex = ceil($pref / 4); //Number of prefix octets + $pref_bin = $pref_hex*4; //Number of prefix octets in bits + $pref_rem = $pref_bin - $pref; //Remainder of prefix + echo("Rounding prefix: ".$pref_bin."-".$pref_rem."\n"); $a = gmp_div_q($a, gmp_pow(2,128-$prefix)); //Truncate to just prefix $a = gmp_mul($a, gmp_pow(2,$pref_rem)); //Fill remaining bits in last wildcard octet with zeros @@ -25,12 +31,19 @@ function ipv6_prefix2wildcards($address, $prefix) { for($i = 0; $i < (2**$pref_rem) ; $i++) { //echo("ADDED: ".$i." = ".decbin($i)."\n"); $ap = gmp_or($a, gmp_init($i)); - $wildcards[] = $ap; + $w = gmp_strval($ap, 16); + $w = str_repeat('0', $pref_hex-strlen($w)).$w; + if(strlen($w) < 32) $w.='*'; + $wildcards[] = $w; } return $wildcards; } +function ipv6_string2rev($str) { + return implode('.',str_split(strrev($str))); +} + if(isset($argv[2])) { $wcs = ipv6_prefix2wildcards($argv[1],$argv[2]); } else { @@ -39,6 +52,10 @@ if(isset($argv[2])) { echo("\n"); foreach($wcs as $w) { - //echo(gmp_strval($w, 2)."* :-)\n"); - echo(gmp_strval($w, 16)."*\n"); + echo($w."\n"); +} + +echo("\n"); +foreach($wcs as $w) { + echo(ipv6_string2rev($w)."\n"); }