---
name: "Net::Nslookup"
section: "3pm"
platform: "linux"
package: "libnet-nslookup-perl"
version: "2.04-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Net::Nslookup"
---

# Net::Nslookup(3pm)

Provide nslookup(1)-like capabilities

## NAME

Net::Nslookup - Provide [nslookup(1)](/nslookup/1.md)-like capabilities

## SYNOPSIS

```
  use Net::Nslookup;
  my @addrs = nslookup $host;
  my @mx = nslookup(type => "MX", domain => "perl.org");
```

## DESCRIPTION

`"Net::Nslookup"` provides the capabilities of the standard UNIX command line tool ***nslookup****(1)*. `"Net::DNS"` is a wonderful and full featured module, but quite often, all you need is \`nslookup `$host`\`.  This module provides that functionality.

`"Net::Nslookup"` exports a single function, called `"nslookup"`. `"nslookup"` can be used to retrieve A, PTR, CNAME, MX, NS, SOA,  TXT, and SRV records.

```
  my $a  = nslookup(host => "use.perl.org", type => "A");
  my @mx = nslookup(domain => "perl.org", type => "MX");
  my @ns = nslookup(domain => "perl.org", type => "NS");
  my $name = nslookup(host => "206.33.105.41", type => "PTR");
  my @srv = nslookup(term => "_jabber._tcp.gmail.com", type => "SRV");
```

`"nslookup"` takes a hash of options, one of which should be *term*, and performs a DNS lookup on that term.  The type of lookup is determined by the *type* argument.  If *server* is specified (it should be an IP address, or a reference to an array of IP addresses), that server(s) will be used for lookups.

If only a single argument is passed in, the type defaults to *A*, that is, a normal A record lookup.

If `"nslookup"` is called in a list context, and there is more than one address, an array is returned.  If `"nslookup"` is called in a scalar context, and there is more than one address, `"nslookup"` returns the first address.  If there is only one address returned, then, naturally, it will be the only one returned, regardless of the calling context.

*domain* and *host* are synonyms for *term*, and can be used to make client code more readable.  For example, use *domain* when getting NS records, and use *host* for A records; both do the same thing.

*server* should be a single IP address or a reference to an array of IP addresses:

```
  my @a = nslookup(host => 'example.com', server => '4.2.2.1');
  my @a = nslookup(host => 'example.com', server => [ '4.2.2.1', '128.103.1.1' ])
```

By default, when doing CNAME, MX, and NS lookups, `"nslookup"` returns names, not addresses.  This is a change from versions prior to 2.0, which always tried to resolve names to addresses.  Pass the *recurse =\> 1* flag to `"nslookup"` to have it follow CNAME, MX, and NS lookups.  Note that this usage of "recurse" is not consistent with the official DNS meaning of recurse.

```
    # returns soemthing like ("mail.example.com")
    my @mx = nslookup(domain => 'example.com', type => 'MX');
    # returns soemthing like ("127.0.0.1")
    my @mx = nslookup(domain => 'example.com', type => 'MX', recurse => 1);
```

SOA lookups return the SOA record in the same format as the \`host\` tool:

```
    print nslookup(domain => 'example.com', type => 'SOA');
    dns1.icann.org. hostmaster.icann.org. 2011061433 7200 3600 1209600 3600
```

## TIMEOUTS

Lookups timeout after 15 seconds by default, but this can be configured by passing *timeout =\> X* to `"nslookup"`.

## DEBUGGING

Pass *debug =\> 1* to `"nslookup"` to emit debugging messages to STDERR.

## AUTHOR

darren chamberlain \<darren@cpan.org\>
