hoa / dns
The Hoa\Dns library.
Installs: 194
Dependents: 1
Suggesters: 0
Security: 0
Stars: 22
Watchers: 12
Forks: 7
Open Issues: 1
Requires
- hoa/consistency: ~1.0
- hoa/event: ~1.0
- hoa/exception: ~1.0
Requires (Dev)
- hoa/test: ~2.0
Suggests
- hoa/socket: Provide sockets.
This package is auto-updated.
Last update: 2021-09-20 08:30:47 UTC
README
Hoa is a modular, extensible and
structured set of PHP libraries.
Moreover, Hoa aims at being a bridge between industrial and research worlds.
Hoa\Dns
This library allows to create a domain name resolver.
Installation
With Composer, to include this library into
your dependencies, you need to
require hoa/dns
:
$ composer require hoa/dns '~3.0'
For more installation procedures, please read the Source page.
Testing
Before running the test suites, the development dependencies must be installed:
$ composer install
Then, to run all the test suites:
$ vendor/bin/hoa test:run
For more information, please read the contributor guide.
Quick usage
As a quick overview, we propose to create our own resolution server for the top
level domain .hoa
. We start by modifying the local resolver in order to add a
new resolution host: ours.
Specify a resolution server
On Mac OS X, the simplest way is to write in /etc/resolver/hoa
the following
declarations:
nameserver 127.0.0.1
port 57005
On Linux, we will use DNSMasq
(often already installed). Then, we edit the file /etc/dnsmasq.conf
by adding:
server=/hoa/127.0.0.1#57005
And do not forget to restart:
$ sudo /etc/init.d/dnsmasq restart
* Restarting DNS forwarder and DHCP server dnsmasq [OK]
For Windows, it is more complicated. You should read the documentation.
Create a resolution server
Well, now, we will create our resolution server that will listen
127.0.0.1:57005
(57005
= 0xDEAD
) in UDP. Thus, in the Resolution.php
file:
$dns = new Hoa\Dns\Resolver( new Hoa\Socket\Server('udp://127.0.0.1:57005') ); $dns->on('query', function (Hoa\Event\Bucket $bucket) { $data = $bucket->getData(); echo 'Resolving domain ', $data['domain'], ' of type ', $data['type'], "\n"; return '127.0.0.1'; }); $dns->run();
All query for the top level domain .hoa
will be resolved to 127.0.0.1
(note:
we do not look at the type, which should be A
or AAAA
respectively for IPv4
and IPv6).
Finally, let say we have a HTTP server that runs on 127.0.0.1:8888
and the
index responds yeah \o/
, then we start our resolver:
$ php Resolver.php
And we make an HTTP request on foo.hoa
(that will be resolve to 127.0.0.1
):
$ curl foo.hoa --verbose * About to connect() to foo.hoa port 80 (#0) * Trying 127.0.0.1... connected * Connected to foo.hoa (127.0.0.1) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/a.b.c (…) libcurl/d.e.f > OpenSSL/g.h.i zlib/j.k.l > Host: foo.hoa:80 > Accept: */* > < HTTP/1.1 200 OK < Date: … < Server: … < Content-Type: text/html < Content-Length: 8 < yeah \o/ * Connection #0 to host foo.hoa left intact * Closing connection #0
We see that foo.hoa
is resolved to 127.0.0.1
!
Documentation
The
hack book of Hoa\Dns
contains
detailed information about how to use this library and how it works.
To generate the documentation locally, execute the following commands:
$ composer require --dev hoa/devtools $ vendor/bin/hoa devtools:documentation --open
More documentation can be found on the project's website: hoa-project.net.
Getting help
There are mainly two ways to get help:
- On the
#hoaproject
IRC channel, - On the forum at users.hoa-project.net.
Contribution
Do you want to contribute? Thanks! A detailed contributor guide explains everything you need to know.
License
Hoa is under the New BSD License (BSD-3-Clause). Please, see
LICENSE
for details.
Related projects
The following projects are using this library:
- ec2dns, ec2dns is a set of command line tools that makes it easy to display public hostnames of EC2 instances and ssh into them via their tag name.