sirmonti / doh
DNS over HTTPS 客户端库
Requires
- php: >=7.4
This package is auto-updated.
Last update: 2024-09-26 19:54:24 UTC
README
简介
DNS 解析是一个在所有操作系统中都实现的知名功能,那么,为什么我们需要不同的方式来实现它呢?主要原因是隐私,标准的 DNS 协议不加密连接,这意味着 DNS 请求可以被窃听和伪造。
但还有其他原因;首先,DOH 很快,比很多本地服务器都快。如果你考虑到 Cloudflare 和 Google(主要的 DOH 提供商)拥有庞大的网络基础设施,这并不会让人感到惊讶。但还有更多,DOH 提供了更详细的错误信息。例如,标准的 DNS 服务器可能会将网络错误误解释为不存在的记录。DOH 会正确报告错误。
如果你需要一个快速且可靠的 DNS 名称解析,如果你需要一个快速且可靠的名称解析,更确切地说,如果你需要批量名称解析,DOH 提供了一种比标准 DNS 服务器更好的解决方案。
完整的文档可以在 github.io 页面 找到。
安装
通过 composer
composer require sirmonti/doh
使用方法
实际上,该库支持两个 DoH 提供商,Cloudflare 和 Google。支持是通过两个包装类实现的
- DOHGG:通过 Google 解析名称
- DOHCF:通过 Cloudflare 解析名称
使用一个类或另一个类之间没有区别。选择一个类或另一个类的唯一原因是对公司的喜好。
这些类可以通过静态调用,不需要创建对象。例如,如果你想使用 Google 后端获取 www.google.com 的 IP 地址,调用将是
$ipaddresses=DOHGG::dns('www.google.com','A');
如果你更喜欢 Cloudflare,你也可以将其用作后端
$ipaddresses=DOHCF::dns('www.google.com','A');
这些类有以下方法
DNS 解析
"dns($name,$type)" 方法执行 DNS 查询。查询返回一个包含响应的数组。如果出错,函数将返回一个空数组并将 "status" 属性设置为错误代码。参数是我们想要解析的名称和我们请求的记录类型。
当参数有无效值时,将抛出 InvalidValurException,网络或 DNS 错误不会抛出任何异常,错误将以状态码的形式报告。
有效的记录类型:NS, MX, TXT, A, AAAA, CNAME, SPF, SOA, PTR, SRV, DS, DNSKEY
响应是一个包含返回的响应的数组。如果查询没有有效的响应或发生错误,调用将返回一个空数组并将 "status" 属性设置为错误代码。如果一切正常,状态码将为零。
状态码值
- 0:OK
- 1:空响应。没有对此查询的响应。
- 2:该域的 DNS 服务器配置错误
- 3:该域不存在
- 4:网络错误
- 5:弱响应
- 100:提供的记录类型无效
- 101:提供的 IP 地址无效
- 10XX:1000 以上的值包含 DNS 服务器返回的错误代码
在无效参数的情况下,将抛出 InvalidArgumentException 并带有状态码 100 或 101。
例子
$resp = DOHCF::dns('www.google.com','A'); // Query cloudflare with a single response echo "\nResponse A query:\n"; print_r($resp); printf("DNS response status code: %d\n",DOHCF::getStatus());
该脚本产生以下响应
Response to A query:
Array
(
[0] => 142.250.200.68
)
DNS response status code: 0
在此示例中,我们使用 DOH_PROVIDER 常量来设置解析器
$resp = DOHGG:dns('google.com','TXT'); // Query with a multiple response echo "\nResponse TXT query:\n"; print_r($resp); printf("DNS response status code: %d\n",DOHGG::getStatus());
该脚本产生以下响应
Response to TXT query:
Array
(
[0] => "facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95"
[1] => "MS=E4A68B9AB2BB9670BCE15412F62916164C0B20BB"
[2] => "v=spf1 include:_spf.google.com ~all"
[3] => "docusign=1b0a6754-49b1-4db5-8540-d2c12664b289"
[4] => "apple-domain-verification=30afIBcvSuDV2PLX"
[5] => "google-site-verification=wD8N7i1JTNTkezJ49swvWW48f8_9xveREV4oB-0Hf5o"
[6] => "google-site-verification=TV9-DBe4R80X4v0M4U_bd_J9cpOJM0nikft0jAgjmsQ"
[7] => "docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e"
[8] => "globalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8="
)
DNS response status code: 0
假设查询示例。我们使用硬编码的默认解析器
$resp = DOHCF::dns('nonexistentdomain.test','TXT'); // Query with an invalid response echo "\nResponse TXT query:\n"; print_r($resp); printf("DNS response status code: %d\n",DOHCF::getStatus());
该脚本产生以下响应
Response to bogus query:
Array
(
)
DNS response status code: 3
许可证
此库根据 MIT 许可证 许可。