http://qs321.pair.com?node_id=421483


in reply to Re^2: Whois script help
in thread Whois script help

Kanji said:

I second the use of DNS instead of whois.

but himanh said...

Basically checking if any of my domains are transferred or still with me.

So, if himanh asks his DNS server, he will always believe the domain is with him. Just wanted to throw in this advice.

If you want to make it work, you need to ask a root name server for the delegation information to reach to the name servers. For instance...

#!/usr/bin/perl -w use strict; use NetAddr::IP; use Net::DNS::Resolver; my $res = new Net::DNS::Resolver; # For domains in CCTLDs, you need to ask root-servers.net instead # and follow the delegation chain. $res->nameservers(NetAddr::IP->new("g.gtld-servers.net")->addr); for my $dom (map { chomp; $_ } <DATA>) { my $packet = $res->query($dom, 'NS'); # No answer received... unless ($packet) { warn "No response for $dom\n"; next; } # A DNS answer (response) was received but ... my @answer = $packet->answer; # ... it might not contain real answers ... unless (@answer) { warn "Response packet contains no answer section for $dom\n"; next; } # ... or it might be what I am looking for. for my $s (@answer) { next unless $s->type eq 'NS'; print "$dom: ", $s->nsdname, "\n"; } } __END__ google.com yahoo.com aol.com

will answer the right people for the 7 gTLDs. This is only slightly tested and you might need to change the gtld server to use.

This code should give you something to start playing with...

Best regards

-lem, but some call me fokat

Replies are listed 'Best First'.
Re^4: Whois script help
by Kanji (Parson) on Jan 12, 2005 at 04:50 UTC
    So, if himanh asks his DNS server, he will always believe the domain is with him. Just wanted to throw in this advice.

    Sorry, that was an ommission on my part, but is the reason why I used Net::DNS::Resolver::Recurse instead of the usual Net::DNS::Resolver -- the former starts it's recursive query with the DNS hint servers, which should be the same as the DNS root servers (eg, a.root-servers.net) and are one step up from the gTLD server you use.

    If they're not (because you're running your own root server or using an alternative one), then you can force N:D:R:R to start from a different nameserver with the hints method.

    my @root_ns = map $_ . '.root-servers.net', 'a'..'m'; $res->hints(@root_ns);

        --k.