From e9c37a44c8bf93d53766303ff10997829efe92a9 Mon Sep 17 00:00:00 2001 From: Tomas Mudrunka Date: Thu, 8 Oct 2020 09:37:28 +0200 Subject: [PATCH] Spravne zarovnani delek ipv6 adres reverzu --- php/ipv6wildcard.php | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/php/ipv6wildcard.php b/php/ipv6wildcard.php index 289c0fd..458b3b3 100755 --- a/php/ipv6wildcard.php +++ b/php/ipv6wildcard.php @@ -8,6 +8,8 @@ * 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"); @@ -16,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 @@ -28,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 { @@ -42,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"); } -- 2.30.2