#!/usr/local/bin/ruby # Convert IPv6 address to reverse-record in .ip6.arpa zone # (c)2002,2003 HIROSE, Yuuji [yuuji@gentei.org] # http://www.gentei.org/~yuuji/software/rev6 # Last modified Sun Apr 21 11:21:03 2002 on firestorm # Usage: # rev6 [Options] v6Addr # Options: # -h v6Addr [NS] call `host -t ptr' against its reverse record # -n v6Addr [NS] call `nslookup -type=ptr' against its reverse record # -d v6Addr [Host] print in djbdns record format (not reverse) # -i use .ip6.int instead of .ip6.arpa host = false nslk = false djbfmt = false tld = "arpa" while /^-./ =~ ARGV[0] $_=ARGV[0].dup case $_ when /-h/ host = true when /-n/ nslk = true when /-i/ tld = "int" when /-d/ djbfmt = true; host=nslk=false end $_.sub!(/^-.(.*)/, "-\\1") ARGV.shift unless $_ =~ /^-./ end def usage() open($0, "r"){|me| me.gets # Skip #! line while line=me.gets break if /^$/ =~ line print line end } exit 0 end ARGV[0] or usage v6adr = ARGV[0].split(":") shrink = v6adr.index("") if shrink then omitted = 8 - v6adr.length + 1 v6adr[shrink..shrink] = Array.new(omitted, "0") end v6exp = v6adr.collect{|x| sprintf("%04x", x.hex) }.join("") if djbfmt then if ARGV[1] then print "6#{ARGV[1]}:#{v6exp}:86400\n" else print v6exp, "\n" end else rev6adr = v6exp.reverse.split("").join(".")+".ip6.#{tld}" print rev6adr+"\n" host and system "host -t ptr #{rev6adr} #{ARGV[1]}" nslk and system "nslookup -type=ptr #{rev6adr} #{ARGV[1]}" end