diff options
Diffstat (limited to 'library/Icinga/Protocol/Dns.php')
-rw-r--r-- | library/Icinga/Protocol/Dns.php | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/library/Icinga/Protocol/Dns.php b/library/Icinga/Protocol/Dns.php new file mode 100644 index 0000000..3d422d7 --- /dev/null +++ b/library/Icinga/Protocol/Dns.php @@ -0,0 +1,89 @@ +<?php +/* Icinga Web 2 | (c) 2014 Icinga Development Team | GPLv2+ */ + +namespace Icinga\Protocol; + +/** + * Discover dns records using regular or reverse lookup + */ +class Dns +{ + /** + * Discover all service records on a given domain + * + * @param string $domain The domain to search + * @param string $service The type of the service, like for example 'ldaps' or 'ldap' + * @param string $protocol The transport protocol used by the service, defaults to 'tcp' + * + * @return array An array of all found service records + */ + public static function getSrvRecords($domain, $service, $protocol = 'tcp') + { + $records = dns_get_record('_' . $service . '._' . $protocol . '.' . $domain, DNS_SRV); + return $records === false ? array() : $records; + } + + /** + * Get all ldap records for the given domain + * + * @param string $query The domain to query + * @param int $type The type of DNS-entry to fetch, see + * http://www.php.net/manual/de/function.dns-get-record.php for available types + * + * @return array|null An array of record entries + */ + public static function records($query, $type = DNS_ANY) + { + return dns_get_record($query, $type); + } + + /** + * Reverse lookup all host names available on the given ip address + * + * @param string $ipAddress + * @param int $type + * + * @return array|null + */ + public static function ptr($ipAddress, $type = DNS_ANY) + { + $host = gethostbyaddr($ipAddress); + if ($host === false || $host === $ipAddress) { + // malformed input or no host found + return null; + } + return self::records($host, $type); + } + + /** + * Get the IPv4 address of the given hostname. + * + * @param $hostname The hostname to resolve + * + * @return string|null The IPv4 address of the given hostname or null, when no entry exists. + */ + public static function ipv4($hostname) + { + $records = dns_get_record($hostname, DNS_A); + if ($records !== false && count($records) > 0) { + return $records[0]['ip']; + } + return null; + } + + /** + * Get the IPv6 address of the given hostname. + * + * @param $hostname The hostname to resolve + * + * @return string|null The IPv6 address of the given hostname or null, when no entry exists. + */ + public static function ipv6($hostname) + { + $records = dns_get_record($hostname, DNS_AAAA); + if ($records !== false && count($records) > 0) { + return $records[0]['ip']; + } + return null; + } +} |