. * * @link http://librenms.org * * @copyright 2021 Thomas Berberich * @author Thomas Berberch */ namespace LibreNMS\Util; use LibreNMS\Interfaces\Geocoder; class Dns implements Geocoder { protected $resolver; public function __construct() { $this->resolver = new \Net_DNS2_Resolver(); } /** * @param string $domain Domain which has to be parsed * @param string $record DNS Record which should be searched * @return array List of matching records */ public function getRecord($domain, $record = 'A') { try { $ret = $this->resolver->query($domain, $record); return $ret->answer; } catch (\Net_DNS2_Exception $e) { d_echo('::query() failed: ' . $e->getMessage()); return []; } } public function getCoordinates($hostname) { foreach ($this->getRecord($hostname, 'LOC') as $record) { return [ 'lat' => $record->latitude ?? null, 'lng' => $record->longitude ?? null, ]; } return []; } }