Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

List TLD nameservers

by chazzz (Pilgrim)
on Jul 21, 2001 at 20:16 UTC ( [id://98669]=sourcecode: print w/replies, xml ) Need Help??
Category: Networking Code
Author/Contact Info chazzz
Description: This script has a list of top level domains and queries the root-servers for the corresponding nameservers. It then prints the results in pretty html. Requires Net::DNS.
use Net::DNS;

@data = ("com","edu","gov","int","mil","net","org","ac","ad","ae","af"
+,"ag","ai",
"al","am","an","ao","aq","ar","as","at","au","aw","az","ba","bb","bd",
+"be","bf",
"bg","bh","bi","bj","bm","bn","bo","br","bs","bt","bv","bw","by","bz",
+"ca","cc",
"cd","cf","cg","ch","ci","ck","cl","cm","cn","co","cr","cs","cu","cv",
+"cx","cy",
"cz","de","dj","dk","dm","do","dz","ec","ee","eg","eh","er","es","et",
+"fi","fj",
"fk","fm","fo","fr","ga","gb","gd","ge","gf","gg","gh","gi","gl","gm",
+"gn","gp",
"gq","gr","gs","gt","gu","gw","gy","hk","hm","hn","hr","ht","hu","id",
+"ie","il",
"im","in","io","iq","ir","is","it","je","jm","jo","jp","ke","kg","kh",
+"ki","km",
"kn","kp","kr","kw","ky","kz","la","lb","lc","li","lk","lr","ls","lt",
+"lu","lv",
"ly","ma","mc","md","mg","mh","mk","ml","mm","mn","mo","mp","mq","mr",
+"ms","mt",
"mu","mv","mw","mx","my","mz","na","nc","ne","nf","ng","ni","nl","no",
+"np","nr",
"nu","nz","om","pa","pe","pf","pg","ph","pk","pl","pm","pn","pr","ps",
+"pt","pw",
"py","qa","re","ro","ru","rw","sa","sb","sc","sd","se","sg","sh","si",
+"sj","sk",
"sl","sm","sn","so","sr","st","su","sv","sy","sz","tc","td","tf","tg",
+"th","tj",
"tk","tm","tn","to","tp","tr","tt","tv","tw","tz","ua","ug","uk","um",
+"us","uy",
"uz","va","vc","ve","vg","vi","vn","vu","wf","ws","ye","yt","yu","za",
+"zm","zr",
"zw");

@data = sort @data;

print "<html><head><title>TLD Nameservers</title></head><body>\n";

foreach $asdf (@data) {
 print "<a name=\"$asdf\"><h1>.$asdf</h1></a>\n";
 $res = new Net::DNS::Resolver;
 $res->nameservers("198.41.0.4","128.9.0.107");
 $query = $res->query($asdf, "NS");
 if ($query) {
  foreach $rr ($query->answer) {
   next unless $rr->type eq "NS";
   @list = ($rr->nsdname,@list);
   }
  @list = sort @list;
  for $zxcv (@list) {
   print "$zxcv<br>\n";
   }
  undef @list;
  } else {
  print "query failed: ", $res->errorstring, "\n";
  }
 }

print "</body></html>";
Replies are listed 'Best First'.
Re: List TLD nameservers
by DrZaius (Monk) on Jul 21, 2001 at 21:26 UTC
    Ewww, icky formatting. Go see perlstyle.

    Where is the use strict?

    This is how I would do a program like this:

    #!/usr/bin/perl -w use strict; use Net::DNS; use HTML::Template; use Getopt::Long; use constant TLDS => qw( com edu gov int mil net org ac ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cd cf cg ch ci ck cl cm cn co cr cs cu cv cx cy cz de dj dk dm do dz ec ee eg eh er es et fi fj fk fm fo fr ga gb gd ge gf gg gh gi gl gm gn gp gq gr gs gt gu gw gy hk hm hn hr ht hu id ie il im in io iq ir is it je jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nc ne nf ng ni nl no np nr nu nz om pa pe pf pg ph pk pl pm pn pr ps pt pw py qa re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sv sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk um us uy uz va vc ve vg vi vn vu wf ws ye yt yu za zm zr zw ); # where our data goes for the template my @data ; # get options GetOptions( \my %config, 'nameserver=s@', 'tld=s@', ); # must be added after or list includes defaults $config{tld} ||= [ TLDS ]; my $res = Net::DNS::Resolver->new(); $res->nameservers(@{ $config{nameserver} }) if defined $config{nameserver}; # do the lookups foreach my $root (@{ $config{tld} }) { my $query; unless($query = $res->search($root, 'NS')) { warn 'query failed (', $root, ') ', $res->errorstring; next; } # add the data to the list my %root_data = ( name => $root, ns => [], ); foreach my $rr ($query->answer) { next unless $rr->type eq 'NS'; push @{ $root_data{ns} }, { address => $rr->nsdname }; } push @data, \%root_data; } # output the data, with the template in the DATA section my $template = HTML::Template->new(filehandle => *DATA); $template->param(roots => \@data); print $template->output; __DATA__ <html> <body> <!--TMPL_LOOP NAME="roots"--> <h2><!--TMPL_VAR NAME='name'--></h2> <ul> <!--TMPL_LOOP NAME='ns'--><li> <!--TMPL_VAR NAME='address'--><!--/T +MPL_LOOP--> </ul> <!--/TMPL_LOOP--> </body> </html>
    Of course, I'd probably write some pod and use the ever great Pod::Usage :)

    Also, another command line argument could be added to specify an alternative template.

    And it would be fairly trivial to turn this into a CGI script, other than the fact it takes a long time to do all the lookups.

      Thank you for your constructive criticism :) I am a newbie and learning... This was originally written as a cgi, all i had to do was take out the header line... My other introductory project was a web interface to GD::Barcode, which worked pretty well :) Thanks once again, i shall read up on Strict and HTML::Template, and work on making it more flexible.
Re: List TLD nameservers
by HyperZonk (Friar) on Jul 22, 2001 at 06:14 UTC
    You may also want to add the new TLDs to your code. They are: biz, info, coop, aero, museum, name, and pro. Only the first two are currently in use, but the remainder will be at some point in the future.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (4)
As of 2024-04-20 16:21 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found