g_speran has asked for the wisdom of the Perl Monks concerning the following question:
Hell Perl Monks,
Is there a way, in the code below, to print the number of answers returned for the query and reply sections, before printing the actual results? I'm sure there is but i am struggling to figure it out.
For the query section, I know my data is in $query->answer->rdatastr and i would like to get the total scalar count
For the reply section, I know the data is in $reply->answer->address and i would like to get the total scalar count
use warnings; use strict; use Net::DNS; use Data::Dumper::Simple; my $dnsserver; my @resolver; @resolver = qw(192.168.10.98); foreach $dnsserver (@resolver) { print "\n\nValidating Entries against $dnsserver\n"; my $resolver = Net::DNS::Resolver->new( nameservers =>$dnsserver, retry => 2, #recurse => 0, #debug => 1, ); my $ip = "192.168.50.70"; my $target_ip = join('.', reverse split(/\./, $ip)).".in-addr.arpa +"; my $query = $resolver->query($target_ip, 'PTR'); my $reply = $resolver->search("garytest.fedlab.local",'A'); warn Dumper(\$query, \$reply); if ($query) { # Print total count Here before Dispalying # Print "Total # of Hostnames found: ",(code) , "\n"; print "\n\nHost names found......\n"; foreach my $answer ($query->answer) { my $value=$answer->rdatastr; chop $value if ($value =~/.$/); print "\t", $value, "\n"; } } else { print "\tReverse Lookup failed: ", $resolver->errorstring, "\n"; } if ($reply) { # Print total count Here before Dispalying # Print "Total # of IP found: ",(code) , "\n"; # print "\n\nIP Address Found found......\n"; foreach my $rr ($reply->answer) { print "\t", $rr->address, "\n"; } } else { warn "\tForward Lookup Failed: ", $resolver->errorstring, +"\n"; } }
OUTPUT.......With Dumper
Z:\>perl net_dns.pl Validating Entries against 192.168.10.98 $query = bless( { 'replyfrom' => '192.168.10.98', 'status' => 34176, 'authority' => [], 'answer' => [ bless( { 'ptrdname' => bless( { 'label +' => [ + 'garytest_dup3' + ] }, 'Net: +:DNS::DomainName1035' ), 'owner' => bless( { 'label' = +> [], 'origin' +=> bless( { + 'label' => [ + '70', + '50', + '168', + '192', + 'in-addr', + 'arpa' + ] + }, 'Net::DNS::DomainName' ) }, 'Net::DN +S::DomainName1035' ), 'rdlength' => 15, 'class' => 1, 'type' => 12, 'ttl' => 3600 }, 'Net::DNS::RR::PTR' ), bless( { 'rdlength' => 23, 'owner' => bless( { 'label' = +> [], 'origin' +=> $query->{'answer'}[0]{'owner'}{'origin'} }, 'Net::DN +S::DomainName1035' ), 'ttl' => 3600, 'class' => 1, 'type' => 12, 'ptrdname' => bless( { 'label +' => [ + 'garytest', + 'fedlab', + 'local' + ] }, 'Net: +:DNS::DomainName1035' ) }, 'Net::DNS::RR::PTR' ), bless( { 'rdlength' => 16, 'owner' => bless( { 'label' = +> [], 'origin' +=> $query->{'answer'}[0]{'owner'}{'origin'} }, 'Net::DN +S::DomainName1035' ), 'ttl' => 3600, 'type' => 12, 'class' => 1, 'ptrdname' => bless( { 'origi +n' => bless( { + 'label' => [ + 'fedlab', + 'local' + ] + }, 'Net::DNS::DomainName' ), 'label +' => [ + 'garytest_dup2' + ] }, 'Net: +:DNS::DomainName1035' ) }, 'Net::DNS::RR::PTR' ), bless( { 'ptrdname' => bless( { 'origi +n' => $query->{'answer'}[2]{'ptrdname'}{'origin'}, 'label +' => [ + 'garytest_dup4' + ] }, 'Net: +:DNS::DomainName1035' ), 'ttl' => 3600, 'class' => 1, 'type' => 12, 'rdlength' => 16, 'owner' => bless( { 'origin' +=> $query->{'answer'}[0]{'owner'}{'origin'}, 'label' = +> [] }, 'Net::DN +S::DomainName1035' ) }, 'Net::DNS::RR::PTR' ), bless( { 'ttl' => 3600, 'class' => 1, 'type' => 12, 'rdlength' => 14, 'owner' => bless( { 'origin' +=> $query->{'answer'}[0]{'owner'}{'origin'}, 'label' = +> [] }, 'Net::DN +S::DomainName1035' ), 'ptrdname' => bless( { 'label +' => [ + 'garytest_dup' + ] }, 'Net: +:DNS::DomainName1035' ) }, 'Net::DNS::RR::PTR' ) ], 'question' => [ bless( { 'qclass' => 1, 'qname' => bless( { 'label' + => [ + '70', + '50', + '168', + '192', + 'in-addr', + 'arpa' + ] }, 'Net:: +DNS::DomainName1035' ), 'qtype' => 12 }, 'Net::DNS::Question' ) ], 'count' => [ 1, 5, 0, 0 ], 'additional' => [], 'id' => 55726, 'xedns' => bless( { 'owner' => bless( { 'label' => [ +] }, 'Net::DNS:: +DomainName1035' ), 'type' => 41 }, 'Net::DNS::RR::OPT' ), 'replysize' => 188 }, 'Net::DNS::Packet' ); $reply = bless( { 'replysize' => 87, 'xedns' => bless( { 'owner' => $query->{'xedns'}{'ow +ner'}, 'type' => 41 }, 'Net::DNS::RR::OPT' ), 'additional' => [], 'id' => 40872, 'count' => [ 1, 3, 0, 0 ], 'question' => [ bless( { 'qtype' => 1, 'qname' => bless( { 'label' + => [ + 'garytest', + 'fedlab', + 'local' + ] }, 'Net:: +DNS::DomainName1035' ), 'qclass' => 1 }, 'Net::DNS::Question' ) ], 'authority' => [], 'answer' => [ bless( { 'address' => '+¿2G', 'ttl' => 3600, 'class' => 1, 'type' => 1, 'rdlength' => 4, 'owner' => bless( { 'origin' +=> bless( { + 'label' => [ + 'garytest', + 'fedlab', + 'local' + ] + }, 'Net::DNS::DomainName' ), 'label' = +> [] }, 'Net::DN +S::DomainName1035' ) }, 'Net::DNS::RR::A' ), bless( { 'type' => 1, 'class' => 1, 'ttl' => 3600, 'owner' => bless( { 'origin' +=> $reply->{'answer'}[0]{'owner'}{'origin'}, 'label' = +> [] }, 'Net::DN +S::DomainName1035' ), 'rdlength' => 4, 'address' => '+¿2F' }, 'Net::DNS::RR::A' ), bless( { 'rdlength' => 4, 'owner' => bless( { 'origin' +=> $reply->{'answer'}[0]{'owner'}{'origin'}, 'label' = +> [] }, 'Net::DN +S::DomainName1035' ), 'ttl' => 3600, 'type' => 1, 'class' => 1, 'address' => '+¿2H' }, 'Net::DNS::RR::A' ) ], 'status' => 34176, 'replyfrom' => '192.168.10.98' }, 'Net::DNS::Packet' ); Host names found...... garytest_dup3 garytest.fedlab.local garytest_dup2.fedlab.local garytest_dup4.fedlab.local garytest_dup IP Address Found found...... 192.168.50.71 192.168.50.70 192.168.50.72
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Net::DNS answer count
by kcott (Archbishop) on Apr 08, 2023 at 22:19 UTC | |
by g_speran (Scribe) on Apr 08, 2023 at 23:55 UTC | |
by kcott (Archbishop) on Apr 10, 2023 at 06:37 UTC | |
by g_speran (Scribe) on Apr 10, 2023 at 13:21 UTC |