home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 May / Chip_2000-05_cd1.bin / zkuste / Perl / ActivePerl-5.6.0.613.msi / 䆊䌷䈹䈙䏵-䞅䞆䞀㡆䞃䄦䠥 / _21310c7dbbe15788c090ced7c05da1d6 < prev    next >
Text File  |  2000-03-23  |  15KB  |  381 lines

  1.  
  2. <HTML>
  3. <HEAD>
  4. <TITLE>Net::DNS - Perl interface to the DNS resolver</TITLE>
  5. <LINK REL="stylesheet" HREF="../../../Active.css" TYPE="text/css">
  6. <LINK REV="made" HREF="mailto:">
  7. </HEAD>
  8.  
  9. <BODY>
  10. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  11. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  12. <STRONG><P CLASS=block> Net::DNS - Perl interface to the DNS resolver</P></STRONG>
  13. </TD></TR>
  14. </TABLE>
  15.  
  16. <A NAME="__index__"></A>
  17. <!-- INDEX BEGIN -->
  18.  
  19. <UL>
  20.  
  21.     <LI><A HREF="#name">NAME</A></LI><LI><A HREF="#supportedplatforms">SUPPORTED PLATFORMS</A></LI>
  22.  
  23.     <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
  24.     <LI><A HREF="#description">DESCRIPTION</A></LI>
  25.     <UL>
  26.  
  27.         <LI><A HREF="#resolver objects">Resolver Objects</A></LI>
  28.         <LI><A HREF="#packet objects">Packet Objects</A></LI>
  29.         <LI><A HREF="#header objects">Header Objects</A></LI>
  30.         <LI><A HREF="#question objects">Question Objects</A></LI>
  31.         <LI><A HREF="#rr objects">RR Objects</A></LI>
  32.     </UL>
  33.  
  34.     <LI><A HREF="#methods">METHODS</A></LI>
  35.     <UL>
  36.  
  37.         <LI><A HREF="#version">version</A></LI>
  38.         <LI><A HREF="#mx">mx</A></LI>
  39.         <LI><A HREF="#yxrrset">yxrrset</A></LI>
  40.         <LI><A HREF="#nxrrset">nxrrset</A></LI>
  41.         <LI><A HREF="#yxdomain">yxdomain</A></LI>
  42.         <LI><A HREF="#nxdomain">nxdomain</A></LI>
  43.         <LI><A HREF="#rr_add">rr_add</A></LI>
  44.         <LI><A HREF="#rr_del">rr_del</A></LI>
  45.     </UL>
  46.  
  47.     <LI><A HREF="#examples">EXAMPLES</A></LI>
  48.     <UL>
  49.  
  50.         <LI><A HREF="#look up a host's addresses.">Look up a host's addresses.</A></LI>
  51.         <LI><A HREF="#find the nameservers for a domain.">Find the nameservers for a domain.</A></LI>
  52.         <LI><A HREF="#find the mx records for a domain.">Find the MX records for a domain.</A></LI>
  53.         <LI><A HREF="#print a domain's soa record in zone file format.">Print a domain's SOA record in zone file format.</A></LI>
  54.         <LI><A HREF="#perform a zone transfer and print all the records.">Perform a zone transfer and print all the records.</A></LI>
  55.         <LI><A HREF="#perform a background query and do some other work while waiting">Perform a background query and do some other work while waiting</A></LI>
  56.         <LI><A HREF="#send a background query and use select to determine when the answer">Send a background query and use select to determine when the answer</A></LI>
  57.     </UL>
  58.  
  59.     <LI><A HREF="#bugs">BUGS</A></LI>
  60.     <LI><A HREF="#copyright">COPYRIGHT</A></LI>
  61.     <LI><A HREF="#author information">AUTHOR INFORMATION</A></LI>
  62.     <LI><A HREF="#see also">SEE ALSO</A></LI>
  63. </UL>
  64. <!-- INDEX END -->
  65.  
  66. <HR>
  67. <P>
  68. <H1><A NAME="name">NAME</A></H1>
  69. <P>Net::DNS - Perl interface to the DNS resolver</P>
  70. <P>
  71. <HR>
  72. <H1><A NAME="supportedplatforms">SUPPORTED PLATFORMS</A></H1>
  73. <UL>
  74. <LI>Linux</LI>
  75. <LI>Solaris</LI>
  76. <LI>Windows</LI>
  77. </UL>
  78. <HR>
  79. <H1><A NAME="synopsis">SYNOPSIS</A></H1>
  80. <P><CODE>use Net::DNS;</CODE></P>
  81. <P>
  82. <HR>
  83. <H1><A NAME="description">DESCRIPTION</A></H1>
  84. <P>Net::DNS is a collection of Perl modules that act as a Domain
  85. Name System (DNS) resolver.  It allows the programmer to perform
  86. DNS queries that are beyond the capabilities of <A HREF="../../../lib/Pod/perlfunc.html#item_gethostbyname"><CODE>gethostbyname</CODE></A>
  87. and <A HREF="../../../lib/Pod/perlfunc.html#item_gethostbyaddr"><CODE>gethostbyaddr</CODE></A>.</P>
  88. <P>The programmer should be somewhat familiar with the format of
  89. a DNS packet and its various sections.  See RFC 1035 or
  90. <EM>DNS and BIND</EM> (Albitz & Liu) for details.</P>
  91. <P>
  92. <H2><A NAME="resolver objects">Resolver Objects</A></H2>
  93. <P>A resolver object is an instance of the <CODE>Net::DNS::Resolver</CODE> class.
  94. A program can have multiple resolver objects, each maintaining
  95. its own state information such as the nameservers to be queried, 
  96. whether recursion is desired, etc.</P>
  97. <P>
  98. <H2><A NAME="packet objects">Packet Objects</A></H2>
  99. <P><CODE>Net::DNS::Resolver</CODE> queries return <CODE>Net::DNS::Packet</CODE> objects.  Packet
  100. objects have five sections:</P>
  101. <UL>
  102. <LI>
  103. The header section, a <CODE>Net::DNS::Header</CODE> object.
  104. <P></P>
  105. <LI>
  106. The question section, a list of <CODE>Net::DNS::Question</CODE> objects.
  107. <P></P>
  108. <LI>
  109. The answer section, a list of <CODE>Net::DNS::RR</CODE> objects.
  110. <P></P>
  111. <LI>
  112. The authority section, a list of <CODE>Net::DNS::RR</CODE> objects.
  113. <P></P>
  114. <LI>
  115. The additional section, a list of <CODE>Net::DNS::RR</CODE> objects.
  116. <P></P></UL>
  117. <P>The <CODE>Net::DNS::Update</CODE> package is a front-end to <CODE>Net::DNS::Packet</CODE>
  118. for creating packet objects to be used in dynamic updates.</P>
  119. <P>
  120. <H2><A NAME="header objects">Header Objects</A></H2>
  121. <P><CODE>Net::DNS::Header</CODE> objects represent the header section of a DNS packet.</P>
  122. <P>
  123. <H2><A NAME="question objects">Question Objects</A></H2>
  124. <P><CODE>Net::DNS::Question</CODE> objects represent the question section of a DNS packet.</P>
  125. <P>
  126. <H2><A NAME="rr objects">RR Objects</A></H2>
  127. <P><CODE>Net::DNS::RR</CODE> is the base class for DNS resource record (RR) objects in
  128. the answer, authority, and additional sections of a DNS packet.</P>
  129. <P>Don't assume that RR objects will be of the type you requested -- always
  130. check an RR object's type before calling any of its methods.</P>
  131. <P>
  132. <HR>
  133. <H1><A NAME="methods">METHODS</A></H1>
  134. <P>See the manual pages listed above for other class-specific methods.</P>
  135. <P>
  136. <H2><A NAME="version">version</A></H2>
  137. <PRE>
  138.     print Net::DNS->version, "\n";</PRE>
  139. <P>Returns the version of Net::DNS.</P>
  140. <P>
  141. <H2><A NAME="mx">mx</A></H2>
  142. <PRE>
  143.     # Use a default resolver -- can't get an error string this way.
  144.     use Net::DNS;
  145.     @mx = mx("foo.com");</PRE>
  146. <PRE>
  147.     # Use your own resolver object.
  148.     use Net::DNS;
  149.     $res = new Net::DNS::Resolver;
  150.     @mx = mx($res, "foo.com");</PRE>
  151. <P>Returns a list of <CODE>Net::DNS::RR::MX</CODE> objects representing the MX
  152. records for the specified name; the list will be sorted by preference.
  153. Returns an empty list if the query failed or no MX records were
  154. found.</P>
  155. <P>This method does not look up A records -- it only performs MX queries.</P>
  156. <P>See <A HREF="#examples">EXAMPLES</A> for a more complete example.</P>
  157. <P>
  158. <H2><A NAME="yxrrset">yxrrset</A></H2>
  159. <P>Use this method to add an ``RRset exists'' prerequisite to a dynamic
  160. update packet.  There are two forms, value-independent and
  161. value-dependent:</P>
  162. <PRE>
  163.     # RRset exists (value-independent)
  164.     $packet->push("pre", yxrrset("foo.bar.com A"));</PRE>
  165. <P>Meaning:  At least one RR with the specified name and type must
  166. exist.</P>
  167. <PRE>
  168.     # RRset exists (value-dependent)
  169.     $packet->push("pre", yxrrset("foo.bar.com A 10.1.2.3"));</PRE>
  170. <P>Meaning:  At least one RR with the specified name and type must
  171. exist and must have matching data.</P>
  172. <P>Returns a <CODE>Net::DNS::RR</CODE> object or <A HREF="../../../lib/Pod/perlfunc.html#item_undef"><CODE>undef</CODE></A> if the object couldn't
  173. be created.</P>
  174. <P>
  175. <H2><A NAME="nxrrset">nxrrset</A></H2>
  176. <P>Use this method to add an ``RRset does not exist'' prerequisite to
  177. a dynamic update packet.</P>
  178. <PRE>
  179.     $packet->push("pre", nxrrset("foo.bar.com A"));</PRE>
  180. <P>Meaning:  No RRs with the specified name and type can exist.</P>
  181. <P>Returns a <CODE>Net::DNS::RR</CODE> object or <A HREF="../../../lib/Pod/perlfunc.html#item_undef"><CODE>undef</CODE></A> if the object couldn't
  182. be created.</P>
  183. <P>
  184. <H2><A NAME="yxdomain">yxdomain</A></H2>
  185. <P>Use this method to add a ``name is in use'' prerequisite to a dynamic
  186. update packet.</P>
  187. <PRE>
  188.     $packet->push("pre", yxdomain("foo.bar.com"));</PRE>
  189. <P>Meaning:  At least one RR with the specified name must exist.</P>
  190. <P>Returns a <CODE>Net::DNS::RR</CODE> object or <A HREF="../../../lib/Pod/perlfunc.html#item_undef"><CODE>undef</CODE></A> if the object couldn't
  191. be created.</P>
  192. <P>
  193. <H2><A NAME="nxdomain">nxdomain</A></H2>
  194. <P>Use this method to add a ``name is not in use'' prerequisite to a
  195. dynamic update packet.</P>
  196. <PRE>
  197.     $packet->push("pre", nxdomain("foo.bar.com"));</PRE>
  198. <P>Meaning:  No RR with the specified name can exist.</P>
  199. <P>Returns a <CODE>Net::DNS::RR</CODE> object or <A HREF="../../../lib/Pod/perlfunc.html#item_undef"><CODE>undef</CODE></A> if the object couldn't
  200. be created.</P>
  201. <P>
  202. <H2><A NAME="rr_add">rr_add</A></H2>
  203. <P>Use this method to add RRs to a zone.</P>
  204. <PRE>
  205.     $packet->push("update", rr_add("foo.bar.com A 10.1.2.3"));</PRE>
  206. <P>Meaning:  Add this RR to the zone.</P>
  207. <P>RR objects created by this method should be added to the ``update''
  208. section of a dynamic update packet.  The TTL defaults to 86400
  209. seconds (24 hours) if not specified.</P>
  210. <P>Returns a <CODE>Net::DNS::RR</CODE> object or <A HREF="../../../lib/Pod/perlfunc.html#item_undef"><CODE>undef</CODE></A> if the object couldn't
  211. be created.</P>
  212. <P>
  213. <H2><A NAME="rr_del">rr_del</A></H2>
  214. <P>Use this method to delete RRs from a zone.  There are three forms:
  215. delete an RRset, delete all RRsets, and delete an RR.</P>
  216. <PRE>
  217.     # Delete an RRset.
  218.     $packet->push("update", rr_del("foo.bar.com A"));</PRE>
  219. <P>Meaning:  Delete all RRs having the specified name and type.</P>
  220. <PRE>
  221.     # Delete all RRsets.
  222.     $packet->push("update", rr_del("foo.bar.com"));</PRE>
  223. <P>Meaning:  Delete all RRs having the specified name.</P>
  224. <PRE>
  225.     # Delete an RR.
  226.     $packet->push("update", rr_del("foo.bar.com A 10.1.2.3"));</PRE>
  227. <P>Meaning:  Delete all RRs having the specified name, type, and data.</P>
  228. <P>RR objects created by this method should be added to the ``update''
  229. section of a dynamic update packet.</P>
  230. <P>Returns a <CODE>Net::DNS::RR</CODE> object or <A HREF="../../../lib/Pod/perlfunc.html#item_undef"><CODE>undef</CODE></A> if the object couldn't
  231. be created.</P>
  232. <P>
  233. <HR>
  234. <H1><A NAME="examples">EXAMPLES</A></H1>
  235. <P>The following examples show how to use the <CODE>Net::DNS</CODE> modules.
  236. See the other manual pages and the demo scripts included with the
  237. source code for additional examples.</P>
  238. <P>See the <CODE>Net::DNS::Update</CODE> manual page for an example of performing
  239. dynamic updates.</P>
  240. <P>
  241. <H2><A NAME="look up a host's addresses.">Look up a host's addresses.</A></H2>
  242. <PRE>
  243.   use Net::DNS;
  244.   $res = new Net::DNS::Resolver;
  245.   $query = $res->search("foo.bar.com");
  246.   if ($query) {
  247.       foreach $rr ($query->answer) {
  248.           next unless $rr->type eq "A";
  249.           print $rr->address, "\n";
  250.       }
  251.   }
  252.   else {
  253.       print "query failed: ", $res->errorstring, "\n";
  254.   }</PRE>
  255. <P>
  256. <H2><A NAME="find the nameservers for a domain.">Find the nameservers for a domain.</A></H2>
  257. <PRE>
  258.   use Net::DNS;
  259.   $res = new Net::DNS::Resolver;
  260.   $query = $res->query("foo.com", "NS");
  261.   if ($query) {
  262.       foreach $rr ($query->answer) {
  263.           next unless $rr->type eq "NS";
  264.           print $rr->nsdname, "\n";
  265.       }
  266.   }
  267.   else {
  268.       print "query failed: ", $res->errorstring, "\n";
  269.   }</PRE>
  270. <P>
  271. <H2><A NAME="find the mx records for a domain.">Find the MX records for a domain.</A></H2>
  272. <PRE>
  273.   use Net::DNS;
  274.   $name = "foo.com";
  275.   $res = new Net::DNS::Resolver;
  276.   @mx = mx($res, $name);
  277.   if (@mx) {
  278.       foreach $rr (@mx) {
  279.           print $rr->preference, " ", $rr->exchange, "\n";
  280.       }
  281.   }
  282.   else {
  283.       print "can't find MX records for $name: ", $res->errorstring, "\n";
  284.   }</PRE>
  285. <P>
  286. <H2><A NAME="print a domain's soa record in zone file format.">Print a domain's SOA record in zone file format.</A></H2>
  287. <PRE>
  288.   use Net::DNS;
  289.   $res = new Net::DNS::Resolver;
  290.   $query = $res->query("foo.com", "SOA");
  291.   if ($query) {
  292.       ($query->answer)[0]->print;
  293.   }
  294.   else {
  295.       print "query failed: ", $res->errorstring, "\n";
  296.   }</PRE>
  297. <P>
  298. <H2><A NAME="perform a zone transfer and print all the records.">Perform a zone transfer and print all the records.</A></H2>
  299. <PRE>
  300.   use Net::DNS;
  301.   $res = new Net::DNS::Resolver;
  302.   $res->nameservers("ns.foo.com");
  303.   @zone = $res->axfr("foo.com");
  304.   foreach $rr (@zone) {
  305.       $rr->print;
  306.   }</PRE>
  307. <P>
  308. <H2><A NAME="perform a background query and do some other work while waiting for the answer.">Perform a background query and do some other work while waiting
  309. for the answer.</A></H2>
  310. <PRE>
  311.   use Net::DNS;
  312.   $res = new Net::DNS::Resolver;
  313.   $socket = $res->bgsend("foo.bar.com");
  314.   until ($res->bgisready($socket)) {
  315.       # do some work here while waiting for the answer
  316.       # ...and some more here
  317.   }
  318.   $packet = $res->bgread($socket);
  319.   $packet->print;</PRE>
  320. <P>
  321. <H2><A NAME="send a background query and use select to determine when the answer has arrived.">Send a background query and use select to determine when the answer
  322. has arrived.</A></H2>
  323. <PRE>
  324.   use Net::DNS;
  325.   use IO::Select;
  326.   $timeout = 5;
  327.   $res = new Net::DNS::Resolver;
  328.   $bgsock = $res->bgsend("foo.bar.com");
  329.   $sel = new IO::Select($bgsock);
  330.   # Add more sockets to $sel if desired.
  331.   @ready = $sel->can_read($timeout);
  332.   if (@ready) {
  333.       foreach $sock (@ready) {
  334.           if ($sock == $bgsock) {
  335.               $packet = $res->bgread($bgsock);
  336.               $packet->print;
  337.               $bgsock = undef;
  338.           }
  339.           # Check for the other sockets.
  340.           $sel->remove($sock);
  341.           $sock = undef;
  342.       }
  343.   }
  344.   else {
  345.       print "timed out after $timeout seconds\n";
  346.   }</PRE>
  347. <P>
  348. <HR>
  349. <H1><A NAME="bugs">BUGS</A></H1>
  350. <P><CODE>Net::DNS</CODE> is slow.  Real slow.</P>
  351. <P>For other items to be fixed, please see the TODO file included with
  352. the source distribution.</P>
  353. <P>
  354. <HR>
  355. <H1><A NAME="copyright">COPYRIGHT</A></H1>
  356. <P>Copyright (c) 1997 Michael Fuhr.  All rights reserved.  This program is free
  357. software; you can redistribute it and/or modify it under the same terms as
  358. Perl itself.</P>
  359. <P>
  360. <HR>
  361. <H1><A NAME="author information">AUTHOR INFORMATION</A></H1>
  362. <P>Michael Fuhr <<A HREF="mailto:mfuhr@dimensional.com">mfuhr@dimensional.com</A>>
  363. <A HREF="http://www.dimensional.com/~mfuhr/perldns/">http://www.dimensional.com/~mfuhr/perldns/</A></P>
  364. <P>
  365. <HR>
  366. <H1><A NAME="see also">SEE ALSO</A></H1>
  367. <PRE>
  368.  
  369. L<perl(1)>, L<Net::DNS::Resolver>, L<Net::DNS::Packet>, L<Net::DNS::Update>,
  370. L<Net::DNS::Header>, L<Net::DNS::Question>, L<Net::DNS::RR>, RFC 1035,
  371. I<DNS and BIND> by Paul Albitz & Cricket Liu</PRE>
  372. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  373. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  374. <STRONG><P CLASS=block> Net::DNS - Perl interface to the DNS resolver</P></STRONG>
  375. </TD></TR>
  376. </TABLE>
  377.  
  378. </BODY>
  379.  
  380. </HTML>
  381.