#!/usr/bin/perl use strict; no strict 'refs'; use vars qw($res @foo %name); use Net::DNS; $res=new Net::DNS::Resolver; while (<>) { @foo=split; if (!defined($name{$foo[0]})) { $name{$foo[0]}=&lookup($res, $foo[0]); } s/^$foo[0]/$name{$foo[0]}/; print; } sub arpa { my($addr)=@_; join(".", reverse(split(/\./, $addr))) . ".in-addr.arpa"; } sub lookup { my($res, $addr)=@_; my $rr; my $arpa=&arpa($addr); QUERY: my $query=$res->query($arpa, "PTR"); if ($query) { foreach $rr ($query->answer) { if ($rr->type eq "PTR") { return $rr->ptrdname; } elsif ($rr->type eq "CNAME") { # print STDERR "!!!!!!!!!!!!*******************!!!!!!!!!!!!!!!\n"; # print STDERR "returned CNAME for $arpa?\n"; # for (keys(%{$rr})) # { # print $_, "=", $rr->{$_}, "\n"; # } $arpa=$rr->cname; goto QUERY; } } } else { print STDERR "failed for $addr.\n"; } return $addr; }