jdwx / dns-query
原生PHP DNS解析器和更新库(PHP 8.1+)
Requires
- php: >=8.1
- ext-ctype: *
- ext-filter: *
- ext-openssl: *
- ext-sockets: *
- jdwx/array-cache: ^1.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-16 22:04:00 UTC
README
本包的主要特性包括
- 使用现代PHP命名空间、类和异常
- 支持IPv4和IPv6,TCP和UDP套接字。
- 包含用于处理动态更新的单独“更新器”类
- 支持使用TSIG和SIG(0)对更新和区域传输进行区域签名
- 支持使用PSR-6/PSR-16缓存实现来提高性能
- 包含许多RR,包括DNSSEC RR。
- 完全兼容PHP 8.1。
安装DNSQuery
您可以通过Composer直接要求它: https://packagist.org.cn/packages/jdwx/dns-query
composer require jdwx/dns-query
或从GitHub下载源码: https://github.com/jdwx/dns-query.git
要求
- PHP 8.1+
- PHP INI设置
mbstring.func_overload
等于0、1、4或5。
使用DNSQuery
DNSQuery根据需求提供多个接口。
最简单的接口旨在模仿PHP内置的dns_get_record()函数,并具有查询其他名称服务器的额外灵活性。
$out = Resolver::dns_get_record( 'google.com', DNS_MX ); var_dump( $out );
array(1) {
[0] =>
array(6) {
'host' =>
string(10) "google.com"
'class' =>
string(2) "IN"
'ttl' =>
int(300)
'type' =>
string(2) "MX"
'pri' =>
int(10)
'target' =>
string(15) "smtp.google.com"
}
}
但它允许指定附加选项,例如用于查找的名称服务器
$out = Resolver::dns_get_record( 'google.com', DNS_MX, '1.1.1.1' ); var_dump( $out );
(产生与上面相同的输出。)
您还可以指定要用于查找的名称服务器列表或自定义resolv.conf文件。(见示例。)
对于重复查询,应实例化解析器。它还以该形式提供兼容性接口
$rsv = new Resolver(); $out = $rsv->compatQuery( 'google.com', DNS_MX ); var_dump( $out );
(产生与上面相同的输出。)
原生查询接口返回联系名称服务器的完整响应详情
$rsv = new Resolver(); $out = $rsv->query( 'google.com', 'MX' ); var_dump( $out );
class JDWX\DNSQuery\Packet\ResponsePacket#13 (12) {
public string $rdata =>
string(49) "(binary data)"
public int $rdLength =>
int(49)
public int $offset =>
int(49)
public JDWX\DNSQuery\Packet\Header $header =>
class JDWX\DNSQuery\Packet\Header#14 (15) {
public int $id =>
int(37144)
public int $qr =>
int(1)
public int $opcode =>
int(0)
public int $aa =>
int(0)
public int $tc =>
int(0)
public int $rd =>
int(1)
public int $ra =>
int(1)
public int $zero =>
int(0)
public int $ad =>
int(0)
public int $cd =>
int(0)
public int $rCode =>
int(0)
public int $qdCount =>
int(1)
public int $anCount =>
int(1)
public int $nsCount =>
int(0)
public int $arCount =>
int(0)
}
public array $question =>
array(1) {
[0] =>
class JDWX\DNSQuery\Question#15 (3) {
public string $qName =>
string(10) "google.com"
public string $qType =>
string(2) "MX"
public string $qClass =>
string(2) "IN"
}
}
public array $answer =>
array(1) {
[0] =>
class JDWX\DNSQuery\RR\MX#16 (8) {
public string $name =>
string(10) "google.com"
public string $type =>
string(2) "MX"
public string $class =>
string(2) "IN"
public int $ttl =>
int(226)
public int $rdLength =>
int(9)
public string $rdata =>
string(9) "(binary data)"
public int $preference =>
int(10)
public string $exchange =>
string(15) "smtp.google.com"
}
}
public array $authority =>
array(0) {
}
public array $additional =>
array(0) {
}
private array $compressed =>
array(0) {
}
public string $answerFrom =>
string(7) "1.1.1.1"
public int $answerSocketType =>
int(2)
public float $responseTime =>
double(0.0037810802459717)
}
文档
文档正在开发中 这里.
稳定性
本包的测试覆盖率开发不完整,目前仅限于Resolver功能。更新器和通知器尚未测试,并且并非所有RR都有测试覆盖率。
历史
此包是从Net_DNS2分叉的,Net_DNS2由Mike Pultz维护,直到2020年。主要区别是
- 已移除PEAR支持。
- 某些以前是可选的(例如,filter扩展)现在需要。
- 用流畅设置器替换了难以验证的数组样式选项配置。
- 更改了缓存实现
- 使用PSR-4命名空间和兼容的自动加载。
- 通过我的组织的内部代码质量标准。
- 对网络代码进行大量重构以提高未来的灵活性(例如,DNS over HTTPS)。
- 额外的单元测试。
我道歉,向后兼容性不是优先事项;我的公司要求遵守某些编码标准以支持这项工作。因此,这可能仅适用于新开发。
原始包代表了多年来完成的大量工作。因此,Mike Pultz应得到本包大部分工作的全部信用;我所做的大部分工作是锦上添花,并将其适应我的特定需求。但由于这是一个公共仓库,我想明确表示,我并不声称对Mike的原始工作拥有信用。
有关Net_DNS2的更多信息,请参阅 Net_DNS2 网站。