Pandabot/vendor/daverandom/libdns/examples/AQuery.php

74 lines
2 KiB
PHP
Executable file

<?php
/**
* Makes a simple A record lookup query and outputs the results
*
* PHP version 5.4
*
* @category LibDNS
* @package Examples
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 1.0.0
*/
namespace LibDNS\Examples;
use \LibDNS\Messages\MessageFactory;
use \LibDNS\Messages\MessageTypes;
use \LibDNS\Records\QuestionFactory;
use \LibDNS\Records\ResourceQTypes;
use \LibDNS\Encoder\EncoderFactory;
use \LibDNS\Decoder\DecoderFactory;
// Config
$queryName = 'faß.de';
$serverIP = '8.8.8.8';
$requestTimeout = 3;
require __DIR__ . '/autoload.php';
// Create question record
$question = (new QuestionFactory)->create(ResourceQTypes::A);
$question->setName($queryName);
// Create request message
$request = (new MessageFactory)->create(MessageTypes::QUERY);
$request->getQuestionRecords()->add($question);
$request->isRecursionDesired(true);
// Encode request message
$encoder = (new EncoderFactory)->create();
$requestPacket = $encoder->encode($request);
echo "\n" . $queryName . ":\n";
// Send request
$socket = stream_socket_client("udp://$serverIP:53");
stream_socket_sendto($socket, $requestPacket);
$r = [$socket];
$w = $e = [];
if (!stream_select($r, $w, $e, $requestTimeout)) {
echo " Request timeout.\n";
exit;
}
// Decode response message
$decoder = (new DecoderFactory)->create();
$responsePacket = fread($socket, 512);
$response = $decoder->decode($responsePacket);
// Handle response
if ($response->getResponseCode() !== 0) {
echo " Server returned error code " . $response->getResponseCode() . ".\n";
exit;
}
$answers = $response->getAnswerRecords();
if (count($answers)) {
foreach ($response->getAnswerRecords() as $record) {
/** @var \LibDNS\Records\Resource $record */
echo " " . $record->getData() . "\n";
}
} else {
echo " Not found.\n";
}