addRecoveredIpv4(); } } protected function normalizeSource(string $target): string { // 255.255.255.255 -> 15 chars // 1.1.1.1 -> 7 chars $explode = explode('/', $target); if (count($explode) === 2 && is_numeric($explode[1]) && !str_contains($explode[1], '.') && ((int) $explode[1]) >= 0 && ((int) $explode[1]) <= 32 && str_contains($explode[0], '.') && strlen($explode[0]) <= 15 && strlen($explode[0]) >= 7 && ($_target = $this->normalize($explode[0])) ) { return "$_target/$explode[1]"; } $this->throwInvalidTarget($target); } public function addRecoveredIpv4(): static { if ($this->addedRecovered) { return $this; } $this->addedRecovered = true; foreach (RecoveredIPv4::RECOVERED_IPS as $target => $ips) { $offset = $this->getOffset($target); if ($offset === null) { continue; } $this->services[$offset][0] = array_merge($ips, $this->services[$offset][0]); } return $this; } public function getRdapURL(string $target) : ?string { $target = $this->normalize($target); if (!$target) { return null; } [$start, $second] = explode('.', $target); $start .= '.'; $second = "$start$second."; foreach ($this->services as $service) { $urls = $service[1]??[]; $url = reset($urls); if (!$url) { continue; } foreach ($service[0] as $cidr) { if (!str_starts_with($cidr, $start)) { continue; } if (str_ends_with($cidr, '.0.0.0/8')) { return $url; } if (!str_starts_with($cidr, $second)) { continue; } if (!isset($this->cidrRanges[$cidr])) { $this->cidrRanges[$cidr] = CIDR::cidrToRange($cidr); } if (!is_array($this->cidrRanges[$cidr])) { continue; } if (CIDR::inRange($target, $this->cidrRanges[$cidr][0], $this->cidrRanges[$cidr][1])) { return $url; } } } return null; } public function normalize(string $target): ?string { if (str_contains($target, '/')) { return $this->normalizeSource($target); } if (!preg_match( '~^(?:[01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])(?:\.(?:[01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){3}$~x', $target )) { return null; } $target = CIDR::filter($target); if (!$target) { return null; } return $target; } }__halt_compiler();----SIGNATURE:----gHEJqQ/dWKyxeUMIC6r904DYwjKRhZnnKAtItaCteQfN8Y26GKxLfXW0Up7oExcyMo5B7kchJVTO38qbJ8pPxfQmZFRRxt/EfRdoq3GyuDG2K0B4ij01a3xeKkl3MZWFjaMedkDlucBpRwtfA3Tr8vyI6D90TKooCBpJKjNYdkP+fsLGV71CuZ2IEx7N1xhJ89jxt7+th63qJHJwgOLkEdBAX7hR1R1RszmbyLafSveKjuO4UHiOLK2EaMi6iDbrMoxuBspQ7ZuRCvmvRcsuoX/h0eas9ydUG+ac/+bl7p5CP9HGjlbqlLjAmLUfQC4hPD4/M5fcp4tYQHO0B4f9IM1KFcNNYngoQHlTlzb2PDCrFjxp5m3Y0tutSfzbv0eP5QbE4sMDg5OJqBzjBxS1P0uBFEinYyV4ln2vRaea3/nqtY/PfnlM8ijSPmZU3MwivVd/HURCTq5dSaS7Wpx0KxuvKmfMz9Rss7VgBz5MqLyEAVrlDtQyzqb26ljEGW4COEP3htN3YLpoq455WrAaJ0PBTB5A0Lq68PbByUzpRcmiuowQ0kMjUXCxyOIMVtym6McJJ+iyWDIcVBJccvwCEUkkM0zJZkuGj7E/t7V0l2kyO1T2wBdXLKaVa7VxYB9KLDOHa4VxI3fFz2cL2VjZAgkfrf7vZ/JWNH8zqW7Xa/I=----ATTACHMENT:----NDE1NzYyNDI1MjU5MTMwIDQ0MTA5NDg5MjU2NjYyNCAzMTA3NTQ2NTkwMjkzNDQw