Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Net::DNS::Resolver using IPv6 transport in nameservers

by elsifsheep (Novice)
on Jul 09, 2020 at 16:48 UTC ( [id://11119100]=perlquestion: print w/replies, xml ) Need Help??

elsifsheep has asked for the wisdom of the Perl Monks concerning the following question:

I'm trying to use IPv6 addresses in Net::DNS::Resolver and it's not working. Help?
%tld_v4_masters = ( "server1" => "10.1.1.1", "server2" => "10.1.1.2", "server3" => "10.1.1.3", "server4" => "10.1.1.4", ); %tld_v6_masters = ( "server1" => "2620:10a:aaaa::1", "server1" => "2620:10a:aaaa::2", "server1" => "2620:10a:aaaa::3", "server1" => "2620:10a:aaaa::4", ); ###################################################################### +#################### ### SUB: &verifymasters; - Verify and Determine which zone masters to +compare myself against ###################################################################### +#################### sub verifymasters { print "Running verifymasters...\n"; foreach $tryzm (values %$prizms) { print "[DEBUG(verifymasters)] Verifying ZM $tryzm with test candid +ate zone $testcandidate...\n" if ($debug); $res = new Net::DNS::Resolver; $res->tcp_timeout (1) ; $res->retry (1) ; $res->retrans (1) ; $query = $res->nameservers($tryzm); $query = $res->query($testcandidate, "SOA"); my $serial=($query->answer)[0]->serial, if ($query); if (length($serial) > 2) { print "[DEBUG(verifymasters)] Marking ZM $tryzm as GOOD!\n" if ( +$debug); $goodzms++; } else { print "[DEBUG(verifymasters)] Marking ZM $tryzm as BAD!\n" if ($ +debug); } } if ($goodzms < 4) { foreach $tryzm (values %$seczms) { print "[DEBUG(verifymasters)] Verifying ZM $tryzm with test cand +idate zone $testcandidate...\n" if ($debug); $res = new Net::DNS::Resolver; $res->tcp_timeout (1) ; $res->retry (1) ; $res->retrans (1) ; $query = $res->nameservers($tryzm); $query = $res->query($testcandidate, "SOA"); my $serial=($query->answer)[0]->serial, if ($query); if (length($serial) > 2) { print "[DEBUG(verifymasters)] Marking ZM $tryzm as GOOD!\n" if + ($debug); $goodzms++; } else { print "[DEBUG(verifymasters)] Marking ZM $tryzm as BAD!\n" if +($debug); } } } }
I end up with the IPv4 checks being marked as GOOD, an the IPv6 tests being marked as BAD.

Replies are listed 'Best First'.
Re: Net::DNS::Resolver using IPv6 transport in nameservers
by elsifsheep (Novice) on Jul 09, 2020 at 17:25 UTC
    I can't explain this behaviour...
    #!/usr/bin/perl use Net::DNS; #use IO::Socket::IP; $testcandidate="cl"; print "IPV4 test...\n"; $res = new Net::DNS::Resolver; $res->tcp_timeout (1) ; $res->retry (1) ; $res->retrans (1) ; $query = $res->nameservers('162.219.53.120'); $query = $res->query($testcandidate, "SOA"); print "What's in the array: \n"; print join ' ', $res->nameservers(); print "\n"; my $serial=($query->answer)[0]->serial, if ($query); print "serial: $serial\n"; print "\n\nIPV6 test...\n"; $res = new Net::DNS::Resolver; $res->tcp_timeout (1) ; $res->retry (1) ; $res->retrans (1) ; $query = $res->nameservers('2620:10a:80d1:1053::120'); $query = $res->query($testcandidate, "SOA"); print "What's in the array: \n"; print join ' ', $res->nameservers(); print "\n"; my $serial=($query->answer)[0]->serial, if ($query); print "serial: $serial\n";
    Which outputs...
    [root@ns01 jzack]# ./snippet IPV4 test... What's in the array: 162.219.53.120 serial: 2020070925 IPV6 test... What's in the array: serial:
    How is it that the IPv6 address isn't even being mentioned when I print the array elements? I thought I was debugging a Net::DNS issue...but it seems I must be doing something wrong with arrays in general? When I throw this into debug, I see: IPV6 test... ;; query(cl, SOA) ;; setting up an AF_INET() family type UDP socket So how do I get it to not use AF_INET?
      The answer to my question was: The Net::DNS::Resolver library will use IPv6 transport if the appropriate libraries (Socket6 and IO::Socket::INET6) are available and the address the server tries to connect to is an IPv6 address. Self-solved.
        >Self-solved.

        Congrats, that's always the best kind of solved. =D Just replying so you didn't look like you were talking to yourself any more than the rest of us.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://11119100]
Approved by johngg
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (5)
As of 2024-03-28 13:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found