instance(DnsLookup::class, …)`, wie FakeRemoteShell und * FakeProxmoxClient es für SSH und Proxmox schon vormachen). Ein Test, der für * seine Zusicherung echtes DNS bräuchte, prüft nicht die Regel, sondern das * Netz des Rechners, auf dem er gerade läuft. * * Ein Name, der sich nicht auflösen lässt, ergibt ein leeres Feld — kein * Fehler. Der einzige Aufrufer (BlockAddress::exemptRanges()) behandelt das * wie einen leeren Eintrag. */ class DnsLookup { /** @return array */ public function addressesFor(string $name): array { $v4 = gethostbynamel($name); // Getrennt geholt, weil gethostbynamel() nur A-Records kennt. Ein // Endpunkt, der ausschließlich per AAAA existiert, wäre sonst still // nicht ausgenommen — genau der Fehler, den dieser Umbau schließt, nur // eine Adressfamilie weiter. $records = @dns_get_record($name, DNS_AAAA) ?: []; $v6 = array_values(array_filter(array_map( fn (array $record): string => (string) ($record['ipv6'] ?? ''), $records, ))); return array_values(array_unique(array_merge( is_array($v4) ? $v4 : [], $v6, ))); } }