Componette

Componette

mesour

mesour / dns-checker v0.3.0

DNS checker written in PHP to find DNS records and compare it.

download-cloud-line composer require mesour/dns-checker

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

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',
    ],
]);

Development

Run command make qa

PhpUnit

Run command make phpunit

PHP Stan

Run command make phpstan

Code style

Run command make cs

Run command make csf for fix

Parallel lint

Run command make lint

  • v0.3.0 Released version 0.3.0

    Changes

    • Fixed for PHP 8
    • Increased minimum compatibility to PHP 8.0+
    • Fixed PhpStan
    • Used PhpUnit instead of Nette tester
  • v0.2.0 Released version 0.2.0

    Changes

    • Fixed for PHP 7.4
    • Increased minimum compatibility to PHP 7.1+
  • v0.1.3 Released version 0.1.3

    Changes

    • IpAddressValidator and IpAddressNormalizer moved to separate package
  • v0.1.2 Released version 0.1.2

    Changes

    • Added support for DnsRecordDiffs
    • Added IpAddress helpers
  • v0.1.1 Released version 0.1.1

    Changes

    • Added DnsRecordRequest and ArrayDnsRecordProvider
  • v0.1.0 Released version 0.1.0

    initial

price-tag-2-line

Badges

guide-fill

Dependencies

php (>=8.0)
Componette Componette felix@nette.org