ljpc / pure-php-doh-client
Easily query DNS records via HTTPS
Fund package maintenance!
Buy Me A Coffee
Installs: 1 695
Dependents: 0
Suggesters: 0
Security: 0
Stars: 5
Watchers: 1
Forks: 0
Open Issues: 1
Requires
- php: ^8.0
- ext-curl: *
This package is auto-updated.
Last update: 2024-12-19 12:14:38 UTC
README
This library finally makes it easy to query DNS records in PHP without any third party extensions.
Features
- 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
Resource records
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
Installation & loading
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"
Structure
\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]
Example
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"; }
License
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.
Inspiration
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/
Custom software
Interested in a library or anything else? Please let us know via info@ljpc.nl or www.ljpc.solutions.
Donations
This library took a lot of time. If we helped you or your business, please consider donating. Click here to donate.