1. Go to this page and download the library: Download sharkydog/mdns library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
sharkydog / mdns example snippets
use SharkyDog\mDNS;
use React\Dns\Config\Config as DnsConfig;
use React\Dns\Resolver\Factory as DnsFactory;
$domain = 'homeassistant.local';
$dnsConfig = DnsConfig::loadSystemConfigBlocking();
$dnsResolver = (new DnsFactory)->create($dnsConfig);
$resolver = new mDNS\React\Resolver(2,true,$dnsResolver);
$resolver->resolve($domain)->then(
function($addr) {
print "Found IP ".$addr."\n";
},
function(\Exception $e) {
print "Error: ".$e->getMessage()."\n";
}
);
public function __construct(int $timeout=2, bool $unicast=true, ?ResolverInterface $dnsResolver=null);
use SharkyDog\mDNS;
$mdnsd = new mDNS\SimpleResponder;
$mdnsd->addRecordIPv4('my-local-pc.local', '192.168.1.123');
$mdnsd->start();
// Stopping will close the socket and discard queued replies.
//$mdnsd->stop();
public function addRecordIPv4(string $name, string $addr, int $ttl=120, $cfbit=true);
public function addRecordIPv6(string $name, string $addr, int $ttl=120, $cfbit=true);
public function addRecord(React\Dns\Model\Record $record, $cfbit=false);
public function delRecord(string $name, int $type, $data=null): bool;
public function addReverseIPv4(string $addr, string $name, int $ttl=120);
public function delReverseIPv4(string $addr): bool;
public function enableRecord(string $name, int $type, $data=null, bool $enable=true);
use SharkyDog\mDNS;
$mdnsd = new mDNS\SimpleResponder;
$mdnsd->addRecordIPv4('my-local-pc.local', '192.168.1.123');
$mdnsd->addService('_testsvc1._tcp', 'instance1', -1, 'my-local-pc.local', 23456, 'aa','bb','cc');
$mdnsd->start();
public function addService(string $type, string $instance, ?int $ttl=null, ?string $target=null, int $srvport=0, string ...$txts);
public function delService(string $type, string $instance, bool $srv=true, bool $txt=true);
public function enableService(string $type, string $instance, bool $enable=true);
public function advertiseService(string $type, string $instance, ?int $ttl=null);
use SharkyDog\mDNS;
$rfy = new mDNS\RecordFactory;
$mdnsd = new mDNS\SimpleResponder;
$mdnsd->addRecord($rfy->A('my-router.local', '192.168.1.1'));
$mdnsd->addRecord($rfy->A('my-pc.local', '192.168.1.2'));
$mdnsd->addRecord($rfy->TXT('sometxt-my-pc.local', 120, 'txt1','txt2','...'));
public function resolveAll($domain, $type, bool $multi=false);
use SharkyDog\mDNS;
use React\Dns\Model\Message;
$resolver = new mDNS\React\Resolver(2);
$resolver->resolveAll('_http._tcp.local', Message::TYPE_PTR, true)->then(
function($data) {
print_r(array_unique($data));
},
function(\Exception $e) {
print "Error: ".$e->getMessage()."\n";
}
);
use SharkyDog\mDNS;
use React\Dns\Model\Message;
$resolver = new mDNS\React\Resolver(2);
$resolver->resolveAll('_services._dns-sd._udp.local', Message::TYPE_PTR, true)->then(
function($data) {
print_r(array_unique($data));
},
function(\Exception $e) {
print "Error: ".$e->getMessage()."\n";
}
);
public function resolveAll($domain, $type, bool $multi=false, bool $additional=false);
use React\Dns\Model\Message;
use React\Dns\Query\Query;
$filter = function(Message $message, string $addr, Query $query) {
// some code here
};
// set filter for all queries
$resolver->setMDnsFilter($filter_all);
// set filter for next query
$resolver->setMDnsQueryFilter($filter_query1);
// $filter_all, then $filter_query1
$resolver->resolve($domain1);
// only $filter_all
$resolver->resolve($domain2);
use SharkyDog\mDNS;
use SharkyDog\mDNS\Discoverer\Service;
$discoverer = new mDNS\SimpleDiscoverer;
// get all web servers that advertise themselves through mDNS
$discoverer->service('_http._tcp.local')->then(
function($services) {
foreach($services as $service) {
$address = $service->target[0];
print "Service ".$service->name;
print " on ".$address->address.":".$service->port."\n";
}
},
function(\Throwable $e) {
print "Error: [".get_class($e)."] ".$e->getMessage()."\n";
}
);
public function service(
string $name,
bool $ip4=true,
bool $ip6=false,
bool $txt=false,
array &$addrr=[]
): React\Promise\PromiseInterface;
use SharkyDog\mDNS;
use SharkyDog\mDNS\Discoverer\Service;
// use with custom resolver and change default timeout
$resolver = new mDNS\React\Resolver(5);
$discoverer = new mDNS\SimpleDiscoverer($resolver);
// will discard all services not on port 80
// and stop resolver on two received services
$discoverer->filter(function(Service $service) {
static $counter = 0;
if($service->port != 80) {
return false;
}
if(++$counter == 2) {
return true;
}
});
// ask for all services on the network
// resolve IPv4, not IPv6
// ask for TXTs if not already in additional from PTRs
$discoverer->service('_services._dns-sd._udp.local',true,false,true)->then(
function($services) {
foreach($services as $service) {
$address = $service->target[0];
print "Service ".$service->name;
print " on ".$address->address.":".$service->port."\n";
}
},
function(\Throwable $e) {
print "Error: [".get_class($e)."] ".$e->getMessage()."\n";
}
);
use SharkyDog\mDNS;
$observer = new mDNS\SimpleObserver;
$observer->addListener('svc1._test_shd._tcp.local', function($event, $service) {
// do something with $service
}, mDNS\SimpleObserver::SVC_ALL);
$observer->start();
public $removeTimeout = 10; // seconds
public function addListener(string $name, callable $callback, int $events=0): \Closure;
public function removeListener(string $name, \Closure $callback);
public function start();
public function stop(bool $clean=true);
public function clean();
// Responder
namespace SharkyDog\mDNS;
// start
mDNS\WhatIsMyIP::startResponderIPv4();
// stop
mDNS\WhatIsMyIP::stopResponderIPv4();
// start, but only answer if the source ip is in this network
// 192.168.1.1 - 192.168.1.62
mDNS\WhatIsMyIP::startResponderIPv4('192.168.1.0/26');
// Resolver
namespace SharkyDog\mDNS;
// $resolver is optional, use to change timeout
$resolver = new mDNS\React\Resolver(2);
// Accept a reply only if it comes from this network, also optional
// 192.168.1.1 - 192.168.1.254
$promise = mDNS\WhatIsMyIP::resolveIPv4('192.168.1.0/24',$resolver);
// Will add the found IP to this mDNS Responder
$mdnsd = new mDNS\SimpleResponder;
$promise->then(
function($ip) use($mdnsd) {
print "My IP is ".$ip."\n";
$mdnsd->addRecordIPv4('my-local-pc.local', $ip);
},
function(\Exception $e) {
print "Error: [".get_class($e)."] ".$e->getMessage()."\n";
}
);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.