Tag Archives: Programming

Querying The Dac with PHP

I see the same thing over and over, and some people imply or suggest its easy or incredibly hard to connect and query/poll the Nominet DAC (Domain Availability Checker) to get basic data about a domain.

There are a few reasons you would want to do this, the main ones are to build a drop list database or build a drop catching script, but both are built on the same foundations.

Before you can use this, you need to be a Nominet Member, and have a DAC Subscription, but you can access the DAC Testbed for Free without Membership or Subscription.

I’m going to use a high level language for this example, which in this case is PHP, but Perl is faster, and a low level compiled language like C would be way way quicker, but PHP is more than adequate for database building and non-prime drop catching.

Basic Connect to and Poll the Dac

<?php 
$sock = socket_create(AF_INET, SOCK_STREAM, 0); 
echo "Socket Created.<br>";
socket_connect($sock , 'dac.nic.uk' , 3043); 
//change dac.nic.uk to testbed-dac.nominet.org.uk to access testbed.
echo "Socket Connected.<br>";
socket_send ($sock, "steven.co.uk\r\n", 16, 0);
echo "Message Sent.<br />";
$resp = socket_read($sock, 1000);
echo "Response: $resp.  <br />";
socket_send ($sock, "#exit\r\n", 9, 0);
echo "Dac Session Exit Sent.<br />";
socket_shutdown($sock, 2);
echo "Socket Shutdown.<br />";
socket_close($sock);
echo "Socket Closed.<br />";
?>

The above code will result in the following output, it really is as simple a half a dozen lines of code,.

Socket Created.
Socket Connected.
Message Sent.
Response: steven.co.uk,Y,N,1998-08-18,2022-08-18,MORLEY.
Dac Session Exit Sent.
Socket Shutdown.
Socket Closed.

You can now act upon the returned $resp variable, explode it into manageable chunks like…

$dac = split(",",$resp);
echo "Split Dac. <br />";

This will return an array of 6 blocks numbered 0-5, which will be…

Array(
    [0] => steven.co.uk
    [1] => Y
    [2] => N
    [3] => 1998-08-18
    [4] => 2022-08-18
    [5] => MORLEY
)

From here you can put it into a database…

Query a List of Names

Its most likely you would want to add some sort of loop to load a list of names…

<?php 
$arrList = array("steven.uk", "steven.co.uk");
$sock = socket_create(AF_INET, SOCK_STREAM, 0); 
socket_connect($sock , 'dac.nic.uk' , 3043); 

foreach($arrList as $message) {
 socket_send ($sock, $message . "\r\n", len($message)+4, 0);
 $resp = socket_read($sock, 1000);
 echo $resp;
}

socket_send ($sock, "#exit\r\n", 9, 0);
socket_shutdown($sock, 2);
socket_close($sock);

?>

Thats the basics covered where most people seem to strugle, its really endless where you can take a script.

I may revisit this code in future and expand on it, but for now, lets see what you do with it.