PHP DNS utility

v0.0.4 2024-03-12 14:34 UTC

This package is auto-updated.

Last update: 2024-11-12 16:23:22 UTC


README

PHP-7.4 PHP-8.0 PHP-8.1 PHP-8.2 PHPUnit codecov

Use certain DNS handler for DNS interrogation

FOR PHP >= 7.4 ONLY

For older PHP version we strongly suggest bluelibraries/php5-dns

Demo

Example:

$records = DNS::getRecords('bluelibraries.com', RecordTypes::ANY);
print_r($records);
Array
(
    [0] => BlueLibraries\Dns\Records\Types\NS Object
        (
            [data:protected] => Array
                (
                    [host] => bluelibraries.com
                    [ttl] => 21600
                    [class] => IN
                    [type] => NS
                    [target] => ns3.instradns.com
                )
        )
    [1] => BlueLibraries\Dns\Records\Types\A Object
        (
            [data:protected] => Array
                (
                    [host] => bluelibraries.com
                    [ttl] => 21600
                    [class] => IN
                    [type] => A
                    [ip] => 198.50.252.64
                )
        )
)

Install via composer

composer require bluelibraries/dns

This package contains 4 types which can be used for DNS interrogations

  1. DnsGetRecord based on dns_get_record PHP function
  2. Dig based on dig shell command (better than dns_get_record and still secured)
  3. UDP based on raw DNS calls using UDP/socket - useful for short answered queries as UDP answers might be limited to 512 bytes
  4. TCP based on raw DNS calls using TCP/socket - this the best and is set as default handler

Dns handlers comparison

Dns handlers custom settings

// Let's customize the DNS request handler - TCP
$dnsHandler = (new TCP())
    ->setPort(53)
    ->setNameserver('8.8.8.8')
    ->setTimeout(3) // limit execution to 3 seconds
    ->setRetries(5); // allows 5 retries if response fails

// Let's initialize the DNS records service
$dnsRecordsService = new DnsRecords($dnsHandler);

// let's get some TXT records from `bluelibraries.com`
$records = $dnsRecordsService->get('bluelibraries.com', RecordTypes::TXT);

// let's display them
print_r($records);
Array
(
    [0] => BlueLibraries\Dns\Records\Types\TXT Object
        (
            [data:protected] => Array
                (
                    [host] => bluelibraries.com
                    [ttl] => 3600
                    [class] => IN
                    [type] => TXT
                    [txt] => google-site-verification=kWtestq0tP8Ae_WJhRwUcZoqpdEkvuXJk
                )
        )
    [1] => BlueLibraries\Dns\Records\Types\TXT Object
        (
            [data:protected] => Array
                (
                    [host] => bluelibraries.com
                    [ttl] => 3600
                    [class] => IN
                    [type] => TXT
                    [txt] => 55d34914-636b-4x-b349-fdb9f2c1eaca
                )
        )
)

Similar for UDP and DIG

$dnsHandler = (new UDP())
    ->setPort(53)
    ->setNameserver('8.8.8.8')
    ->setTimeout(3) // limit execution to 3 seconds
    ->setRetries(5); // allows 5 retries if response fails

$dnsHandler = (new DIG())
    ->setPort(53)
    ->setNameserver('8.8.8.8')
    ->setTimeout(3) // limit execution to 3 seconds
    ->setRetries(5); // allows 5 retries if response fails

DnsGetRecord - this handler has a limited number of settings

// DnsGetRecord allows only Timeout and Retries, but there is no control over timeout
// so the timeout may be much longer than the limit we set!
$dnsHandler = (new DnsGetRecord())
    ->setTimeout(3) // limit execution to 3 seconds
    ->setRetries(5); // allows 5 retries if response fails

Retrieve records examples, and more...

Retrieve records using dns_get_record

$records = DNS::getRecords('bluelibraries.com', RecordTypes::TXT, DnsHandlerTypes::DNS_GET_RECORD);
print_r($records);
Array
(
    [0] => BlueLibraries\Dns\Records\Types\Txt\DomainVerification Object
        (
            [data:protected] => Array
                (
                    [host] => bluelibraries.com
                    [class] => IN
                    [ttl] => 0
                    [type] => TXT
                    [txt] => google-site-verification=test-636b-4a56-b349-test
                )
        )
)

Retrieve records using dig

$records = DNS::getRecords('bluelibraries.com', RecordTypes::TXT, DnsHandlerTypes::DIG);
print_r($records);
Array
(
    [0] => BlueLibraries\Dns\Records\Types\Txt\DomainVerification Object
        (
            [data:protected] => Array
                (
                    [host] => bluelibraries.com
                    [class] => IN
                    [ttl] => 0
                    [type] => TXT
                    [txt] => google-site-verification=test-636b-4a56-b349-test
                )
        )
)

Retrieve records using UDP

$records = DNS::getRecords('bluelibraries.com', RecordTypes::TXT, DnsHandlerTypes::UDP);
print_r($records);
Array
(
    [0] => BlueLibraries\Dns\Records\Types\Txt\DomainVerification Object
        (
            [data:protected] => Array
                (
                    [host] => bluelibraries.com
                    [class] => IN
                    [ttl] => 0
                    [type] => TXT
                    [txt] => google-site-verification=test-636b-4a56-b349-test
                )
        )
)

Retrieve records using TCP

// TCP is the default DNS handler, so if you are using it then you can skip it
$records = DNS::getRecords('bluelibraries.com', RecordTypes::TXT);
print_r($records);
Array
(
    [0] => BlueLibraries\Dns\Records\Types\Txt\DomainVerification Object
        (
            [data:protected] => Array
                (
                    [host] => bluelibraries.com
                    [class] => IN
                    [ttl] => 0
                    [type] => TXT
                    [txt] => google-site-verification=test-636b-4a56-b349-test
                )
        )
)

Retrieve TXT records

$records = DNS::getRecords('bluelibraries.com', RecordTypes::TXT);
print_r($records);
Array
(
    [0] => BlueLibraries\Dns\Records\Types\Txt\DomainVerification Object
        (
            [data:protected] => Array
                (
                    [host] => bluelibraries.com
                    [ttl] => 3454
                    [class] => IN
                    [type] => TXT
                    [txt] => google-site-verification=kW9t2V_S7WjOX57zq0tP8Ae_WJhRwUcZoqpdEkvuXJk
                )
        )
    [1] => BlueLibraries\Dns\Records\Types\TXT Object
        (
            [data:protected] => Array
                (
                    [host] => bluelibraries.com
                    [ttl] => 3454
                    [class] => IN
                    [type] => TXT
                    [txt] => 55d14914-636b-4a56-b349-fdb9f2c1eaca
                )
        )
)

Retrieve A (address) records

$records = DNS::getRecords('bluelibraries.com', RecordTypes::A);
print_r($records);
Array
(
    [0] => BlueLibraries\Dns\Records\Types\A Object
        (
            [data:protected] => Array
                (
                    [host] => bluelibraries.com
                    [ttl] => 3600
                    [class] => IN
                    [type] => A
                    [ip] => 67.225.146.248
                )
        )
)

Retrieve ALL records

$records = DNS::getRecords('bluelibraries.com', RecordTypes::ALL, DnsHandlerTypes::DIG);
print_r($records);
Array
(
    [0] => BlueLibraries\Dns\Records\Types\NS Object
        (
            [data:protected] => Array
                (
                    [host] => bluelibraries.com
                    [ttl] => 3600
                    [class] => IN
                    [type] => NS
                    [target] => ns2.teestbluelibraries.com
                )
        )
    [1] => BlueLibraries\Dns\Records\Types\Txt\DomainVerification Object
        (
            [data:protected] => Array
                (
                    [host] => bluelibraries.com
                    [ttl] => 3600
                    [class] => IN
                    [type] => TXT
                    [txt] => google-site-verification=errre
                )
        )
    [2] => BlueLibraries\Dns\Records\Types\NS Object
        (
            [data:protected] => Array
                (
                    [host] => bluelibraries.com
                    [ttl] => 3600
                    [class] => IN
                    [type] => NS
                    [target] => tst3.bluelibraries.com
                )
        )
    [3] => BlueLibraries\Dns\Records\Types\TXT Object
        (
            [data:protected] => Array
                (
                    [host] => bluelibraries.com
                    [ttl] => 3600
                    [class] => IN
                    [type] => TXT
                    [txt] => 55d34914-636b-4tes-b349-fdb9f2c1eaca
                )
        )
    [4] => BlueLibraries\Dns\Records\Types\A Object
        (
            [data:protected] => Array
                (
                    [host] => bluelibraries.com
                    [ttl] => 3600
                    [class] => IN
                    [type] => A
                    [ip] => 67.225.146.248
                )
        )
)