#!/usr/bin/perl -w use strict; my $domain=shift||"mm.zq1.de"; $domain=~s/[^.]$/$&./; my $prefixlen=64; # processing starts here my $first=1; my $hostlen=128-$prefixlen; my $oldprefix; while(<>) { s/;.*//; # skip comments next if not m/^(\w+).*AAAA (200[0-9a-f:]+)/; my $name=$1; my @ether=split(":", $2); # normalize :: sequence while(@ether<8) { for(my $n=@ether-1; $n>0; --$n) { if($ether[$n] eq "") { splice(@ether,$n,0,0); if(@ether==8) { $ether[$n]=0 } last; } if($n==1) {die "big error"} } } foreach(@ether) { $_=sprintf("%04s",$_); } my @digits=reverse(split("",join("",@ether))); my $x=$hostlen/4; my $prefix=join(".", @digits[$x..31]); if(!$oldprefix || $prefix ne $oldprefix) { $oldprefix=$prefix; print '$ORIGIN '.$prefix.".ip6.arpa.\n"; } my $n6=join(".", @digits[0..($hostlen/4-1)]); print "$n6 IN PTR $name.$domain\n"; }