This library finally makes it easy to query DNS records in PHP without any third party extensions.
- Automatically query multiple DoH servers (round-robin)
- Prefilled with CloudFlare, Google, Quad9 and AdGuard DoH servers
- Easy to expand servers
- Easy to expand resource records
- No
dig
required, everything is pure PHP - Everything is JSON Serializable
The following resource records are available:
- A
- AAAA
- CAA
- CNAME
- DNAME
- DNSKEY
- DS
- KEY
- LOC
- MX
- NS
- NSEC
- PTR
- RRSIG
- SOA
- SPF
- SRV
- TXT
- URI
- TLSA
LJPc Pure PHP DoH Client is available on Packagist (using semantic versioning), and installation via Composer is the recommended way to install this library.
Just run:
composer require ljpc/pure-php-doh-client
Or add this line to your composer.json
file:
"ljpc/pure-php-doh-client": "^1.0"
\LJPc\DoH\DNS::query
always returns a\LJPc\DoH\DNSQueryResult
which contains the following fields:- used server (
->getServer()
) [string] - answers (
->getAnswers()
) [array of \LJPc\DoH\DNSRecord] - authorityRecords (
->getAuthorityRecords()
) [array of \LJPc\DoH\DNSRecord] - additionalRecords (
->getAdditionalRecords()
) [array of \LJPc\DoH\DNSRecord]
- used server (
\LJPc\DoH\DNSRecord
always has the following fields:- domainname [string]
- ttl [int] (according to the queried server)
- type [string] (e.g. A or MX)
- extras [array] (e.g. the priority in an MX record)
- value [string]
Get the A records for cloudflare.com:
<?php
use LJPc\DoH\DNS;
use LJPc\DoH\DNSType;
require __DIR__ . '/vendor/autoload.php';
$result = DNS::query( 'cloudflare.com', DNSType::A() );
$answers = $result->getAnswers();
foreach ( $answers as $answer ) {
echo $answer->value . "\n";
}
Get the PTR for 142.250.185.174:
<?php
use LJPc\DoH\DNS;
use LJPc\DoH\DNSType;
require __DIR__ . '/vendor/autoload.php';
$result = DNS::query( '142.250.185.174', DNSType::PTR() );
$answers = $result->getAnswers();
foreach ( $answers as $answer ) {
echo $answer->value . "\n";
}
Get the MX records for gmail.com:
<?php
use LJPc\DoH\DNS;
use LJPc\DoH\DNSType;
require __DIR__ . '/vendor/autoload.php';
$result = DNS::query( 'gmail.com', DNSType::MX() );
$answers = $result->getAnswers();
foreach ( $answers as $answer ) {
echo '(' . $answer->extras['priority'] . ') ' . $answer->value . "\n";
}
Use a specific DoH server:
<?php
use LJPc\DoH\DNS;
use LJPc\DoH\DNSType;
use LJPc\DoH\Servers\Quad9;
require __DIR__ . '/vendor/autoload.php';
$result = DNS::query( 'google.com', DNSType::AAAA(), Quad9::class );
$answers = $result->getAnswers();
echo "Used server: " . $result->getServer() . "\n";
foreach ( $answers as $answer ) {
echo $answer->value . "\n";
}
This software is distributed under the GPL 3.0 license, along with the GPL Cooperation Commitment. Please read LICENSE for information on the software availability and distribution.
This package is inspired by the following packages:
- https://github.com/dcid/doh-php-client
- https://github.com/mikepultz/netdns2
- http://www.purplepixie.org/phpdns/
Interested in a library or anything else? Please let us know via info@ljpc.nl or www.ljpc.solutions.
This library took a lot of time. If we helped you or your business, please consider donating. Click here to donate.