'Nur GET-Anfragen erlaubt']); exit; } if (!checkApiRateLimit('dns-lookup')) { rejectApiRateLimit(); } $domain = getValidatedDomainParam(); if ($domain === null) { http_response_code(400); echo json_encode(['error' => empty($_GET['domain']) ? 'Domain-Parameter fehlt' : 'Ungültiges Domain-Format']); exit; } // DNS-Abfrage durchführen $startTime = microtime(true); $result = performDnsLookup($domain); $queryTime = round((microtime(true) - $startTime) * 1000, 2); // Ergebnis zurückgeben echo json_encode([ 'success' => true, 'domain' => $domain, 'query_time_ms' => $queryTime, 'timestamp' => date('Y-m-d H:i:s'), 'records' => $result ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); /** * Führt DNS-Lookup für verschiedene Record-Typen durch */ function performDnsLookup(string $domain): array { $records = [ 'A' => [], 'AAAA' => [], 'MX' => [], 'NS' => [], 'TXT' => [], 'CNAME' => [], 'SOA' => [] ]; // A-Records (IPv4) $aRecords = @dns_get_record($domain, DNS_A); if ($aRecords) { foreach ($aRecords as $record) { $records['A'][] = [ 'ip' => $record['ip'], 'ttl' => $record['ttl'] ]; } } // AAAA-Records (IPv6) $aaaaRecords = @dns_get_record($domain, DNS_AAAA); if ($aaaaRecords) { foreach ($aaaaRecords as $record) { $records['AAAA'][] = [ 'ipv6' => $record['ipv6'], 'ttl' => $record['ttl'] ]; } } // MX-Records (Mail) $mxRecords = @dns_get_record($domain, DNS_MX); if ($mxRecords) { foreach ($mxRecords as $record) { $records['MX'][] = [ 'target' => $record['target'], 'priority' => $record['pri'], 'ttl' => $record['ttl'] ]; } // Nach Priorität sortieren usort($records['MX'], fn($a, $b) => $a['priority'] <=> $b['priority']); } // NS-Records (Nameserver) $nsRecords = @dns_get_record($domain, DNS_NS); if ($nsRecords) { foreach ($nsRecords as $record) { $records['NS'][] = [ 'target' => $record['target'], 'ttl' => $record['ttl'] ]; } } // TXT-Records $txtRecords = @dns_get_record($domain, DNS_TXT); if ($txtRecords) { foreach ($txtRecords as $record) { $records['TXT'][] = [ 'txt' => $record['txt'], 'ttl' => $record['ttl'] ]; } } // CNAME-Records $cnameRecords = @dns_get_record($domain, DNS_CNAME); if ($cnameRecords) { foreach ($cnameRecords as $record) { $records['CNAME'][] = [ 'target' => $record['target'], 'ttl' => $record['ttl'] ]; } } // SOA-Record (Start of Authority) $soaRecords = @dns_get_record($domain, DNS_SOA); if ($soaRecords) { foreach ($soaRecords as $record) { $records['SOA'][] = [ 'mname' => $record['mname'] ?? '', 'rname' => $record['rname'] ?? '', 'serial' => $record['serial'] ?? 0, 'refresh' => $record['refresh'] ?? 0, 'retry' => $record['retry'] ?? 0, 'expire' => $record['expire'] ?? 0, 'minimum_ttl' => $record['minimum-ttl'] ?? 0, 'ttl' => $record['ttl'] ]; } } // Leere Arrays entfernen return array_filter($records, fn($arr) => !empty($arr)); }