protected String getRemoteHostName(final String remoteIp) {
        val revDNS = new ReverseDNSRunnable(remoteIp);
        val thread = Thread.ofVirtual().start(revDNS);
        try {
            thread.join(this.timeout);
        } catch (final InterruptedException e) {
            LOGGER.debug("Threaded lookup failed. Defaulting to IP [{}].", remoteIp, e);
            Thread.currentThread().interrupt();
        }
        val remoteHostName = revDNS.getHostName();
        LOGGER.debug("Found remote host name [{}].", remoteHostName);
        return StringUtils.isNotBlank(remoteHostName) ? remoteHostName : remoteIp;
    }
Convenience method to perform a reverse DNS lookup. Threads the request
through a custom Runnable class in order to prevent inordinately long
user waits while performing reverse lookup.

@param remoteIp the remote ip
@return the remote host name
support/cas-server-support-spnego-webflow/src/main/java/org/apereo/cas/web/flow/client/BaseSpnegoKnownClientSystemsFilterAction.java