dns-checker
dns-checker copied to clipboard
DNS checker written in PHP to find DNS records and compare it.
Mesour DNS checker
-
DNS checker written in PHP for check and compare real DNS records for domain.
-
In
AaaaDnsRecordis 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
typehave same values as parametertypefor 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,\Countableand\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