mesour/dns-checker

DNS检查器,用PHP编写,用于检查和比较域的真实DNS记录。

资助包维护!
mesour

v0.3.0 2023-06-05 02:10 UTC

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. 的问题已解决。

安装

  • 使用 Composer

      composer require mesour/dns-checker
    
  • 或从 GitHub 下载源代码

用法

  1. 创建实例 \Mesour\DnsChecker\Providers\DnsRecordProvider
$provider = new \Mesour\DnsChecker\Providers\DnsRecordProvider();
  1. 创建实例 \Mesour\DnsChecker\DnsChecker
$checker = new \Mesour\DnsChecker\DnsChecker($provider);
  1. 获取DNS记录集(第二个参数 typePHP函数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\StaticDnsRecordProviderMesour\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