#!/usr/bin/perl
# adapted from Marc VanHeyningen's http://cs.indiana.edu/bin/hoststat.pl

require "sys/socket.ph";

$maxlevel = 0;
while(<STDIN>) {
    next unless /^([\d\.]+) / && ($fqdn = &resolv_ipaddr($1));
    $level = 0; $name = "";
    for $_ (reverse(split(/\./, $fqdn))) {
	$name = $_ . "." . $name;
	eval "\$uses$level{\$name}++;";
	$level++;
    }
    $maxlevel = $level if $level > $maxlevel;
}
for $level (0 .. $maxlevel-1) {
    print "LEVEL $level:\n";
    eval "grep(print('\t',\$uses$level{\$_},' ',\$_,'\n'),keys \%uses$level)";
    print "\n";
}

# return FQDN, cache lookup results
sub resolv_ipaddr {
    ($resolver'ipaddr) = @_;
    package resolver;
    return $hosts{$ipaddr} if defined $hosts{$ipaddr};
    # print STDERR "working on $ipaddr\n";
    ($fqdn, $aliases, $type, $len) = 
	gethostbyaddr(pack("C4",split(/\./,$ipaddr)),&'AF_INET) || $ipaddr;
    $fqdn =~ tr/[A-Z]/[a-z]/;
    return ($hosts{$ipaddr} = $fqdn);
}
