mesour / dns-checker
DNS检查器,用PHP编写,用于检查和比较域的真实DNS记录。
v0.3.0
2023-06-05 02:10 UTC
Requires
- php: >=8.0
- mesour/ip-addresses: ^0.3.0
Requires (Dev)
- grifart/phpstan-oneline: ^0.4.2
- nette/di: ^3.1
- orisai/coding-standard: ^3.7
- php-parallel-lint/php-parallel-lint: ^1.3.0
- phpstan/phpstan: ^1.10.0
- phpstan/phpstan-deprecation-rules: ^1.1.0
- phpstan/phpstan-strict-rules: ^1.5
- phpunit/phpunit: ^8.5
- tracy/tracy: ^2.9.0
Suggests
- nette/di: to use class DnsCheckerExtension
This package is auto-updated.
Last update: 2024-09-05 04:55:39 UTC
README
-
DNS检查器,用PHP编写,用于检查和比较域的真实DNS记录。
-
在
AaaaDnsRecord
中,IPv6被压缩为短格式。 -
关于PHP警告
dns_get_record(): A temporary server error occurred.
的问题已解决。
安装
用法
- 创建实例
\Mesour\DnsChecker\Providers\DnsRecordProvider
$provider = new \Mesour\DnsChecker\Providers\DnsRecordProvider();
- 创建实例
\Mesour\DnsChecker\DnsChecker
$checker = new \Mesour\DnsChecker\DnsChecker($provider);
- 获取DNS记录集(第二个参数
type
与 PHP函数dns_get_record() 的参数type
相同)。
$dnsRecordSet = $checker->getDnsRecordSet('example.com', DNS_A + DNS_AAAA);
$dnsRecordSet
例如包含
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
- 实现
\ArrayAccess
、\Countable
和\Iterator
。
检查域名记录是否存在
$dnsRecord = new \Mesour\DnsChecker\Records\DnsRecord('NS', 'example.com', 'ns3.example.com'); Assert::true($dnsRecordSet->hasRecord($dnsRecord));
获取匹配的DNS记录
$dnsRecord = new \Mesour\DnsChecker\Records\DnsRecord('AAAA', 'example.com', '2a00:4444:5555:6666::200e'); $nsDnsRecord = $dnsRecordSet->getMatchingRecord($dnsRecord);
更多信息在单个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);
两个DnsRecordSet之间的区别
$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();
模拟DNS记录提供者
对于模拟DNS提供者,您的测试可以使用 Mesour\DnsChecker\StaticDnsRecordProvider
或 Mesour\DnsChecker\ArrayDnsRecordProvider
。
值与 PHP函数dns_get_record() 返回的值相同。
$provider = new \Mesour\DnsChecker\Providers\StaticDnsRecordProvider([ [ 'host' => 'example.com', 'class' => 'IN', 'ttl' => 34, 'type' => 'A', 'ip' => '216.58.201.78', ], ]);
开发
运行命令 make qa
PhpUnit
运行命令 make phpunit
PHP Stan
运行命令 make phpstan
代码风格
运行命令 make cs
运行命令 make csf
以修复
并行lint
运行命令 make lint