Skip to content

LJPc-solutions/Pure-PHP-DoH-Client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pure PHP DoH Client

This library finally makes it easy to query DNS records in PHP without any third party extensions.

Buy Me A Coffee

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]
  • \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:

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.