public static function check(): array
    {
        $remoteAddr = \getenv('REMOTE_ADDR') ?: null;
        $httpVia = \getenv('HTTP_VIA') ?: null;
        $proxyString = static::getProxyString();
        $ipData = static::$ipData;

        if ($remoteAddr !== null) {
            if ($proxyString !== null) {
                $clientIP = static::getFirstIP($proxyString);
                $proxyIP = $remoteAddr;
                $proxyHost = static::getHost($proxyIP);

                if ($clientIP !== null) {
                    $clientHost = static::getHost($clientIP);
                    $ipData['CLIENT_IP'] = $clientIP;
                    $ipData['CLIENT_HOST'] = $clientHost;
                    $ipData['CLIENT_IP_HOST'] = \sprintf('%s (%s)', $clientIP, $clientHost);
                }
                $ipData['PROXY_IP'] = $proxyIP;
                $ipData['PROXY_HOST'] = $proxyHost;
                $ipData['PROXY_IP_HOST'] = \sprintf('%s (%s)', $proxyIP, $proxyHost);
                $ipData['PROXY_STRING'] = $proxyString;
            } elseif ($httpVia !== null) {
                $proxyHost = static::getHost($remoteAddr);

                $ipData['PROXY_IP'] = $remoteAddr;
                $ipData['PROXY_HOST'] = $proxyHost;
                $ipData['PROXY_IP_HOST'] = \sprintf('%s (%s)', $remoteAddr, $proxyHost);
                $ipData['HTTP_VIA'] = $httpVia;
            } else {
                $clientHost = static::getHost($remoteAddr);

                $ipData['CLIENT_IP'] = $remoteAddr;
                $ipData['CLIENT_HOST'] = $clientHost;
                $ipData['CLIENT_IP_HOST'] = \sprintf('%s (%s)', $remoteAddr, $clientHost);
            }

            $ipData['FULL_IP_HOST'] = static::getFullIpHost($ipData['CLIENT_IP_HOST'], $ipData['PROXY_IP_HOST']);
        }

        return $ipData;
    }