PHP Classes

PHP DNS Check Tool: Check DNS records and compare record sets

Recommend this page to a friend!
  Info   Documentation   View files Files   Install with Composer Install with Composer   Download Download   Reputation   Support forum   Blog    
Ratings Unique User Downloads Download Rankings
Not yet rated by the usersTotal: 145 All time: 9,147 This week: 34Up
Version License PHP version Categories
dns-checker 1.0.0Custom (specified...7Networking, PHP 7
Description 

Author

This class can check DNS records and compare record sets.

It can perform lookups to DNS servers to obtain the values of record for certain domains and of certain record types.

The class can also compare sets of records obtained from different providers like DNS servers or arrays to determine the differences and see what changed.

Innovation Award
PHP Programming Innovation award nominee
February 2018
Number 5
A DNS is a server hosted in the Internet that can return IP addresses of other computers also on the Internet.

Often computers need to query different DNS servers to obtain the IP addresses of same computers, but since the information may not be synchronized, there may be differences between the record values.

This package can determine if there are differences between the values of given records stored in different DNS servers.

Manuel Lemos
Picture of Matous Nemec
Name: Matous Nemec <contact>
Classes: 8 packages by
Country: Czech Republic Czech Republic
Innovation award
Innovation award
Nominee: 2x

 

Documentation

Mesour DNS checker

  • Author
  • DNS checker written in PHP for check and compare real DNS records for domain.
  • In `AaaaDnsRecord` is IPv6 compressed to short format.
  • Problem with PHP warning: `dns_get_record(): A temporary server error occurred.` is resolved.

Install

  • With Composer

    composer require mesour/dns-checker

  • Or download source from GitHub

Usage

  1. Create instance `\Mesour\DnsChecker\Providers\DnsRecordProvider`:
$provider = new \Mesour\DnsChecker\Providers\DnsRecordProvider();

  1. Create instance `\Mesour\DnsChecker\DnsChecker`:
$checker = new \Mesour\DnsChecker\DnsChecker($provider);

  1. Get DNS record set (second parameter `type` have same values as parameter `type` for PHP function dns_get_record().):
$dnsRecordSet = $checker->getDnsRecordSet('example.com', DNS_A + DNS_AAAA);

$dnsRecordSet contains for example:

Mesour\DnsChecker\DnsRecordSet
   dnsRecords private => array (3)
   |  0 => Mesour\DnsChecker\MxRecord #86b8
   |  |  priority private => 40
   |  |  target private => "alt3.aspmx.l.example.com" (24)
   |  |  type private => "MX" (2)
   |  |  name private => "example.com" (11)
   |  |  content private => "40 alt3.aspmx.l.example.com" (27)
   |  |  ttl private => 404
   |  1 => Mesour\DnsChecker\MxRecord #5a7b
   |  |  priority private => 50
   |  |  target private => "alt4.aspmx.l.example.com" (24)
   |  |  type private => "MX" (2)
   |  |  name private => "example.com" (11)
   |  |  content private => "50 alt4.aspmx.l.example.com" (27)
   |  |  ttl private => 404

DnsRecordSet

  • Implements `\ArrayAccess`, `\Countable` and `\Iterator`.

Check if exist domain record:

$dnsRecord = new \Mesour\DnsChecker\Records\DnsRecord('NS', 'example.com', 'ns3.example.com');
Assert::true($dnsRecordSet->hasRecord($dnsRecord));

Get matching DNS record:

$dnsRecord = new \Mesour\DnsChecker\Records\DnsRecord('AAAA', 'example.com', '2a00:4444:5555:6666::200e');
$nsDnsRecord = $dnsRecordSet->getMatchingRecord($dnsRecord);

More information in one DnsRecordSet

$request = new DnsRecordRequest();
$request->addFilter('example.com');
$request->addFilter('www.example.com', DNS_CNAME);
// ... more lines

/ @var \Mesour\DnsChecker\DnsChecker $checker */
/ @var \Mesour\DnsChecker\DnsRecordSet $records */
$records = $checker->getDnsRecordSetFromRequest($request);

Difference between two DnsRecordSets

$factory = new DnsRecordSetDiffFactory();

$expected = $this->createExpectedDnsRecordSet();

$checker = new DnsChecker(new DnsRecordProvider());
$recordSet = $checker->getDnsRecordSet('example.com');

/ @var Mesour\DnsChecker\Diffs\DnsRecordSetDiff $diff */
$diff = $factory->createDiff($expected, $recordSet);

Assert::true($diff->hasDifferentRecord());

$diffs = $diff->getDiffs();

Assert::count(5, $diffs);
Assert::type(Mesour\DnsChecker\Diffs\DnsRecordDiff::class, $diffs[0]);

/ @var DnsRecordDiff $recordDiff */
$recordDiff = $diffs[4];
Assert::true($recordDiff->isDifferent());

// Can use this for get array of similar records with same type
$recordDiff->getSimilarRecords();

Tests

Run command vendor/bin/tester tests/ -s -c tests/php.ini --colors

PHP Stan

Run command vendor/bin/phpstan analyse -l 7 -c phpstan.neon src tests

Code style

Run command vendor/bin/phpcs --standard=ruleset.xml --extensions=php,phpt --encoding=utf-8 --tab-width=4 -sp src tests

Mock DNS record provider

For mock DNS provider your tests can use Mesour\DnsChecker\StaticDnsRecordProvider or Mesour\DnsChecker\ArrayDnsRecordProvider.

Values are as return values of PHP function dns_get_record().

$provider = new \Mesour\DnsChecker\Providers\StaticDnsRecordProvider([
	[
    	'host' => 'example.com',
    	'class' => 'IN',
    	'ttl' => 34,
    	'type' => 'A',
    	'ip' => '216.58.201.78',
    ],
]);

  Files folder image Files (48)  
File Role Description
Files folder imagebin (3 files)
Files folder imagesrc (1 directory)
Files folder imagetests (2 files, 1 directory)
Accessible without login Plain text file .travis.yml Data Auxiliary data
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file license.md Lic. License text
Accessible without login Plain text file phpstan.neon Data Auxiliary data
Accessible without login Plain text file README.md Doc. Documentation
Accessible without login Plain text file ruleset.xml Data Auxiliary data

The PHP Classes site has supported package installation using the Composer tool since 2013, as you may verify by reading this instructions page.
Install with Composer Install with Composer
 Version Control Unique User Downloads Download Rankings  
 100%
Total:145
This week:0
All time:9,147
This week:34Up