Retrieve DNS records
, (*1)
This package contains a class that can fetch DNS records., (*2)
use Spatie\Dns\Dns;
$dns = new Dns();
$dns->getRecords('spatie.be'); // returns all available dns records
$dns->getRecords('spatie.be', 'A'); // returns only A records
You can use various methods to retrieve info of a record., (*3)
$records = $dns->getRecords('spatie.be')
$hostNameOfFirstRecord = $records[0]->host();
Support us
, (*4)
We invest a lot of resources into creating best in class open source packages. You can support us by buying one of our paid products., (*5)
We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on our contact page. We publish all received postcards on our virtual postcard wall., (*6)
Installation
If you do not have dig installed you will need it., (*7)
You can install the package via composer:, (*8)
composer require spatie/dns
Usage
The class can get these record types: A
, AAAA
, CNAME
, NS
, PTR
, SOA
, MX
, SRV
, TXT
, DNSKEY
, CAA
, NAPTR
., (*9)
use Spatie\Dns\Dns;
$dns = new Dns();
$dns->getRecords('spatie.be'); // returns all available dns records
$dns->getRecords('spatie.be', 'A'); // returns only A records
$dns->getRecords('spatie.be', ['A', 'CNAME']); // returns both A and CNAME records
$dns->getRecords('spatie.be', DNS_MX); // returns only MX records
$dns->getRecords('spatie.be', DNS_A | DNS_AAAA); // returns both A and AAAA records
getRecords
will return an array with objects that implement the Spatie\Dns\Records\Record
interface., (*10)
Working with DNS records
Here's how you can fetch the first A-record of a domain., (*11)
$ARecord = $dns->getRecords('spatie.be', 'A')[0];
These methods can be called on all records:, (*12)
-
host()
: returns the host (spatie.be
)
-
ttl()
: return the time to live (900
)
-
class()
: returns the class (IN
)
-
type()
: returns the type (A
)
When converting a record to a string you'll get a string with all info separated with tabs., (*13)
(string)$ARecord // returns `spatie.be. 900 IN A 138.197.187.74`
Some records have additional methods available. For example, records of type A have an additional ip()
method. To know which extra methods there are, check the docblocks above all record classes in the source code., (*14)
Using a specific nameserver
You can get records from a specific nameserver., (*15)
use Spatie\Dns\Dns;
(new Dns)
->useNameserver('ns1.openminds.be') // use ns1.openminds.be
->getRecords('spatie.be');
Specify retries and timeouts for Dig
Dig can be configured to retry a DNS query after a certain timeout. Use setRetries()
or setTimeout()
to configure
those settings. The timeout is specified in seconds., (*16)
use Spatie\Dns\Dns;
(new Dns)
->setRetries(4) // try 4 times
->setTimeout(5) // wait 5 seconds for a reply from the nameserver
->getRecords('spatie.be');
Guessing a record
When you have a string that contains a dns record, you can convert it to a Record
, (*17)
use \Spatie\Dns\Support\Factory();
// returns instance of \Spatie\Dns\Records\CNAME
(new Factory())->guess('www.spatie.be. 300 IN CNAME spatie.be.');
Using custom handlers
A Handler
is responsible for fetching DNS records of a certain type., (*18)
By default, these handlers that ship with the package are used:, (*19)
Spatie\Dns\Handler\Dig
Spatie\Dns\Handler\DnsGetRecord
You can create custom handlers. A valid handler is any class that extends from Spatie\Dns\Handler\Handler
., (*20)
A custom handler class can be used by passing it to useHandlers
on Spatie\Dns\Dns
., (*21)
$results = $this->dns
->useHandlers([new YourCustomHandler()])
->getRecords('spatie.be');
Under the hood
We will use dig to fetch DNS info. If it is not installed on your system, we'll call the native dns_get_record()
function., (*22)
Testing
bash
composer test
, (*23)
Changelog
Please see CHANGELOG for more information what has changed recently., (*24)
Contributing
Please see CONTRIBUTING for details., (*25)
Security
If you've found a bug regarding security please mail security@spatie.be., (*26)
Postcardware
You're free to use this package, but if it makes it to your production environment we highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using., (*27)
Our address is: Spatie, Kruikstraat 22, 2018 Antwerp, Belgium., (*28)
We publish all received postcards on our company website., (*29)
Credits
License
The MIT License (MIT). Please see License File for more information., (*30)