badcow / dns
一个基于RFC1035创建DNS区域文件的PHP库
v4.3.0
2024-08-06 13:50 UTC
Requires
- php: ^8.0
- christian-riesen/base32: ^1.5.2
- rlanvin/php-ip: ^3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.5.0
- phpstan/phpstan: ^1.4
- phpunit/phpunit: ^9.0
- dev-master
- v4.3.0
- v4.2.x-dev
- v4.2.1
- v4.2.0
- v4.1.1
- v4.1.0
- v4.0.0
- v3.5.0
- v3.4.1
- v3.4.0
- v3.3.0
- v3.2.1
- v3.2.0
- v3.1.0
- v3.0.2
- v3.0.1
- v3.0
- v2.4.0
- v2.3.2
- v2.3.1
- v2.3
- v2.2
- v2.1.1
- v2.1.0
- v2.0.2
- v2.0.1
- v2.0
- v1.3
- v1.2
- v1.1.2
- v1.1.1
- v1.1
- v1.0
- v0.19
- v0.18
- v0.17
- v0.16
- v0.15
- v0.14
- v0.13
- v0.12
- v0.11
- v0.10
- v0.9
- v0.8
- v0.7
- v0.6
- v0.5
- v0.4
- v0.3
- v0.2
- v0.1
- dev-php-ip-update
- dev-issue-107
This package is auto-updated.
Last update: 2024-09-06 13:58:12 UTC
README
此项目的目的是在PHP中创建DNS记录的抽象对象表示。项目包括各种代表DNS对象的类(如Zone
、ResourceRecord
以及各种RData
类型),一个解析器用于将BIND风格的文本文件转换为PHP对象,以及构建器用于创建美观的BIND记录。
该库可以解析和编码DNS消息,使开发者能够使用纯PHP创建DNS客户端/服务器平台。
构建状态
内容
示例用法
require_once '/path/to/vendor/autoload.php'; use Badcow\DNS\Classes; use Badcow\DNS\Zone; use Badcow\DNS\Rdata\Factory; use Badcow\DNS\ResourceRecord; use Badcow\DNS\AlignedBuilder; $zone = new Zone('example.com.'); $zone->setDefaultTtl(3600); $soa = new ResourceRecord; $soa->setName('@'); $soa->setClass(Classes::INTERNET); $soa->setRdata(Factory::Soa( 'example.com.', 'post.example.com.', '2014110501', 3600, 14400, 604800, 3600 )); $ns1 = new ResourceRecord; $ns1->setName('@'); $ns1->setClass(Classes::INTERNET); $ns1->setRdata(Factory::Ns('ns1.nameserver.com.')); $ns2 = new ResourceRecord; $ns2->setName('@'); $ns2->setClass(Classes::INTERNET); $ns2->setRdata(Factory::Ns('ns2.nameserver.com.')); $a = new ResourceRecord; $a->setName('sub.domain'); $a->setRdata(Factory::A('192.168.1.42')); $a->setComment('This is a local ip.'); $a6 = new ResourceRecord; $a6->setName('ipv6.domain'); $a6->setRdata(Factory::Aaaa('::1')); $a6->setComment('This is an IPv6 domain.'); $mx1 = new ResourceRecord; $mx1->setName('@'); $mx1->setRdata(Factory::Mx(10, 'mail-gw1.example.net.')); $mx2 = new ResourceRecord; $mx2->setName('@'); $mx2->setRdata(Factory::Mx(20, 'mail-gw2.example.net.')); $mx3 = new ResourceRecord; $mx3->setName('@'); $mx3->setRdata(Factory::Mx(30, 'mail-gw3.example.net.')); $zone->addResourceRecord($soa); $zone->addResourceRecord($mx2); $zone->addResourceRecord($ns1); $zone->addResourceRecord($mx3); $zone->addResourceRecord($a); $zone->addResourceRecord($a6); $zone->addResourceRecord($ns2); $zone->addResourceRecord($mx1); $builder = new AlignedBuilder(); echo $builder->build($zone);
输出
$ORIGIN example.com. $TTL 3600 @ IN SOA ( example.com. ; MNAME post.example.com. ; RNAME 2014110501 ; SERIAL 3600 ; REFRESH 14400 ; RETRY 604800 ; EXPIRE 3600 ; MINIMUM ) ; NS RECORDS @ IN NS ns1.nameserver.com. @ IN NS ns2.nameserver.com. ; A RECORDS sub.domain A 192.168.1.42; This is a local ip. ; AAAA RECORDS ipv6.domain AAAA ::1; This is an IPv6 domain. ; MX RECORDS @ MX 10 mail-gw1.example.net. @ MX 20 mail-gw2.example.net. @ MX 30 mail-gw3.example.net.
以上是AlignedBuilder
的示例,它创建的记录在视觉上更美观。您还可以使用扁平的ZoneBuilder
,其输出如下
... echo ZoneBuilder::build($zone);
$ORIGIN example.com. $TTL 3600 @ IN SOA example.com. post.example.com. 2014110501 3600 14400 604800 3600 @ MX 20 mail-gw2.example.net. @ IN NS ns1.nameserver.com. @ MX 30 mail-gw3.example.net. sub.domain A 192.168.1.42; This is a local ip. ipv6.domain AAAA ::1; This is an IPv6 domain. @ IN NS ns2.nameserver.com. @ MX 10 mail-gw1.example.net.
支持类型
支持所有通用的DNS类型。有关支持的类型的完整详细信息,请参阅文档。
解析BIND记录
可以使用Badcow\DNS\Parser\Parser
将BIND记录解析为PHP对象
$file = file_get_contents('/path/to/example.com.txt'); $zone = Badcow\DNS\Parser\Parser::parse('example.com.', $file); //Badcow Zone Object
就是这样简单。
更多示例可以在文档中找到