Flashnux

GNU/Linux man pages

Livre :
Expressions régulières,
Syntaxe et mise en oeuvre :

ISBN : 978-2-7460-9712-4
EAN : 9782746097124
(Editions ENI)

GNU/Linux

CentOS 4.8

i386

Net::DNS(3pm)


Net::DNS

Net::DNS

NAME
SYNOPSIS
DESCRIPTION
METHODS
EXAMPLES
BUGS
COPYRIGHT
AUTHOR INFORMATION
SEE ALSO

NAME

Net::DNS − Perl interface to the DNS resolver

SYNOPSIS

"use Net::DNS;"

DESCRIPTION

Net::DNS is a collection of Perl modules that act as a Domain Name System ( DNS ) resolver. It allows the programmer to perform DNS queries that are beyond the capabilities of "gethostbyname" and "gethostbyaddr".

The programmer should be somewhat familiar with the format of a DNS packet and its various sections. See RFC 1035 or DNS and BIND (Albitz & Liu) for details.

Resolver Objects

A resolver object is an instance of the Net::DNS::Resolver class. A program can have multiple resolver objects, each maintaining its own state information such as the nameservers to be queried, whether recursion is desired, etc.

Packet Objects

Net::DNS::Resolver queries return Net::DNS::Packet objects. Packet objects have five sections:

The header section, a Net::DNS::Header object.

The question section, a list of Net::DNS::Question objects.

The answer section, a list of Net::DNS::RR objects.

The authority section, a list of Net::DNS::RR objects.

The additional section, a list of Net::DNS::RR objects.

Update Objects

The Net::DNS::Update package is a subclass of Net::DNS::Packet for creating packet objects to be used in dynamic updates.

Header Objects

Net::DNS::Header objects represent the header section of a DNS packet.

Question Objects

Net::DNS::Question objects represent the question section of a DNS packet.

RR Objects

Net::DNS::RR is the base class for DNS resource record ( RR ) objects in the answer, authority, and additional sections of a DNS packet.

Don’t assume that RR objects will be of the type you requested -- always check an RR object’s type before calling any of its methods.

METHODS

See the manual pages listed above for other class-specific methods.

version

    print Net::DNS->version, "\n";

Returns the version of Net::DNS.

mx

    # Use a default resolver -- can’t get an error string this way.
    use Net::DNS;
    my @mx = mx("example.com");

    # Use your own resolver object.
    use Net::DNS;
    my $res = Net::DNS::Resolver->new;
    my  @mx = mx($res, "example.com");

Returns a list of Net::DNS::RR::MX objects representing the MX records for the specified name; the list will be sorted by preference. Returns an empty list if the query failed or no MX records were found.

This method does not look up A records -- it only performs MX queries.

See " EXAMPLES " for a more complete example.

yxrrset

Use this method to add an "RRset exists" prerequisite to a dynamic update packet. There are two forms, value-independent and value−dependent:

    # RRset exists (value-independent)
    $update->push(pre => yxrrset("host.example.com A"));

Meaning: At least one RR with the specified name and type must exist.

    # RRset exists (value-dependent)
    $packet->push(pre => yxrrset("host.example.com A 10.1.2.3"));

Meaning: At least one RR with the specified name and type must exist and must have matching data.

Returns a "Net::DNS::RR" object or "undef" if the object couldn’t be created.

nxrrset

Use this method to add an "RRset does not exist" prerequisite to a dynamic update packet.

    $packet->push(pre => nxrrset("host.example.com A"));

Meaning: No RRs with the specified name and type can exist.

Returns a "Net::DNS::RR" object or "undef" if the object couldn’t be created.

yxdomain

Use this method to add a "name is in use" prerequisite to a dynamic update packet.

    $packet->push(pre => yxdomain("host.example.com"));

Meaning: At least one RR with the specified name must exist.

Returns a "Net::DNS::RR" object or "undef" if the object couldn’t be created.

nxdomain

Use this method to add a "name is not in use" prerequisite to a dynamic update packet.

    $packet->push(pre => nxdomain("host.example.com"));

Meaning: No RR with the specified name can exist.

Returns a "Net::DNS::RR" object or "undef" if the object couldn’t be created.

rr_add

Use this method to add RRs to a zone.

    $packet->push(update => rr_add("host.example.com A 10.1.2.3"));

Meaning: Add this RR to the zone.

RR objects created by this method should be added to the "update" section of a dynamic update packet. The TTL defaults to 86400 seconds (24 hours) if not specified.

Returns a "Net::DNS::RR" object or "undef" if the object couldn’t be created.

rr_del

Use this method to delete RRs from a zone. There are three forms: delete an RRset, delete all RRsets, and delete an RR .

    # Delete an RRset.
    $packet->push(update => rr_del("host.example.com A"));

Meaning: Delete all RRs having the specified name and type.

    # Delete all RRsets.
    $packet->push(update => rr_del("host.example.com"));

Meaning: Delete all RRs having the specified name.

    # Delete an RR.
    $packet->push(update => rr_del("host.example.com A 10.1.2.3"));

Meaning: Delete all RRs having the specified name, type, and data.

RR objects created by this method should be added to the "update" section of a dynamic update packet.

Returns a "Net::DNS::RR" object or "undef" if the object couldn’t be created.

EXAMPLES

The following examples show how to use the "Net::DNS" modules. See the other manual pages and the demo scripts included with the source code for additional examples.

See the "Net::DNS::Update" manual page for an example of performing dynamic updates.

Look up a host’s addresses.

  use Net::DNS;
  my $res   = Net::DNS::Resolver->new;
  my $query = $res->search("host.example.com");

  if ($query) {
      foreach my $rr ($query->answer) {
          next unless $rr->type eq "A";
          print $rr->address, "\n";
      }
  } else {
      warn "query failed: ", $res->errorstring, "\n";
  }

Find the nameservers for a domain.

  use Net::DNS;
  my $res   = Net::DNS::Resolver->new;
  my $query = $res->query("example.com", "NS");

  if ($query) {
      foreach $rr (grep { $_->type eq ’NS’ } $query->answer) {
          print $rr->nsdname, "\n";
      }
  }
  else {
      warn "query failed: ", $res->errorstring, "\n";
  }

Find the MX records for a domain.

  use Net::DNS;
  my $name = "example.com";
  my $res  = Net::DNS::Resolver->new;
  my @mx   = mx($res, $name);

  if (@mx) {
      foreach $rr (@mx) {
          print $rr->preference, " ", $rr->exchange, "\n";
      }
  } else {
      warn "Can’t find MX records for $name: ", $res->errorstring, "\n";
  }

Print a domain’s SOA record in zone file format.

  use Net::DNS;
  my $res   = Net::DNS::Resolver->new;
  my $query = $res->query("example.com", "SOA");

  if ($query) {
      ($query->answer)[0]->print;
  } else {
      print "query failed: ", $res->errorstring, "\n";
  }

Perform a zone transfer and print all the records.

  use Net::DNS;
  my $res  = Net::DNS::Resolver->new;
  $res->nameservers("ns.example.com");
  my @zone = $res->axfr("example.com");
  foreach $rr (@zone) {
      $rr->print;
  }

Perform a background query and do some other work while waiting for the answer.

  use Net::DNS;
  my $res    = Net::DNS::Resolver->new;
  my $socket = $res->bgsend("host.example.com");
  until ($res->bgisready($socket)) {
      # do some work here while waiting for the answer
      # ...and some more here
  }

  my $packet = $res->bgread($socket);
  $packet->print;

Send a background query and use select to determine when the answer has arrived.

  use Net::DNS;
  use IO::Select;
  my $timeout = 5;
  my $res     = Net::DNS::Resolver->new;
  my $bgsock  = $res->bgsend("host.example.com");
  my $sel     = IO::Select->new($bgsock);

  # Add more sockets to $sel if desired.
  my @ready = $sel->can_read($timeout);
  if (@ready) {
      foreach my $sock (@ready) {
          if ($sock == $bgsock) {
              my $packet = $res->bgread($bgsock);
              $packet->print;
              $bgsock = undef;
          }
          # Check for the other sockets.
          $sel->remove($sock);
          $sock = undef;
      }
  } else {
      warn "timed out after $timeout seconds\n";
  }

BUGS

"Net::DNS" is slow.

For other items to be fixed, please see the TODO file included with the source distribution.

COPYRIGHT

Copyright (c) 1997−2002 Michael Fuhr.

Portions Copyright (c) 2002−2004 Chris Reinhardt.

All rights reserved. This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR INFORMATION

Net::DNS is currently maintained by a group, led by:
Chris Reinhardt
ctriv@net−dns.org

Net::DNS was created by:
Michael Fuhr
mike@fuhr.org

For more information see:
http://www.net−dns.org/

SEE ALSO

perl(1), Net::DNS::Resolver, Net::DNS::Packet, Net::DNS::Update, Net::DNS::Header, Net::DNS::Question, Net::DNS::RR, RFC 1035, DNS and BIND by Paul Albitz & Cricket Liu



Net::DNS(3pm)