PHP DNS utility

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

This package is auto-updated.

Last update: 2024-04-12 14:46:32 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

Feature DNS_GET_RECORD DIG UDP TCP
Force timeout limit NO YES YES YES
Detect more record types
that are defined in PHP
NO YES YES YES
Use custom nameserver NO YES YES YES
Handle large responses YES YES NO YES
No need for extra modules/packages for running YES NO YES YES

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
                )
        )
)