mesour / dns-checker
DNS checker written in PHP for check and compare real DNS records for domain.
Fund package maintenance!
mesour
Installs: 10 162
Dependents: 1
Suggesters: 0
Security: 0
Stars: 16
Watchers: 3
Forks: 7
Open Issues: 2
Requires
- php: >=7.1
- mesour/ip-addresses: ^0.2.0
Requires (Dev)
- consistence/coding-standard: ^3.10
- jakub-onderka/php-parallel-lint: ^1.0
- nette/bootstrap: ^2.4
- nette/robot-loader: ^2.4
- nette/tester: ^2.3
- phpstan/phpstan: ^0.12.42
- slevomat/coding-standard: ^6.4
- tracy/tracy: ~2.3.0
Suggests
- nette/bootstrap: to use class DnsCheckerExtension
README
-
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
Usage
- Create instance
\Mesour\DnsChecker\Providers\DnsRecordProvider
:
$provider = new \Mesour\DnsChecker\Providers\DnsRecordProvider();
- Create instance
\Mesour\DnsChecker\DnsChecker
:
$checker = new \Mesour\DnsChecker\DnsChecker($provider);
- Get DNS record set (second parameter
type
have same values as parametertype
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', ], ]);