Получить имя хоста из запроса

Я запускаю свое приложение на Windows Server 2008 в интрасети.

Для входа в систему приложение пытается получить имя хоста из запроса для проверки пользователя. Однако иногда приложение возвращает IP-адрес вместо имени, а через некоторое время, ничего не делая, приложение может разрешить имя, и все работает нормально...

Это код, который я использую для получения имени хоста:

InetAddress inaHost = InetAddress.getByName(request.getRemoteAddr());
String hostname = inaHost.getHostName();
System.out.println("[[ Hostname = " + hostname + " ]]");

Это из-за конфигурации интранета (DNS!?), или что-то не так с моим кодом, колдовством или чем-то еще?


person GoAlves    schedule 08.11.2013    source источник
comment
К чему все эти размышления?   -  person    schedule 08.11.2013
comment
Извините за отражение. Это был остаточный код от другого подхода, который я пробовал. Виноват.   -  person GoAlves    schedule 08.11.2013


Ответы (3)


Первая попытка

System.out.println("Host = " + request.getServerName());
System.out.println("Port = " + request.getServerPort());

если не работает

hostName == null;
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
{
  while (interfaces.hasMoreElements()) {
    NetworkInterface nic = interfaces.nextElement();
    Enumeration<InetAddress> addresses = nic.getInetAddresses();
    while (hostName == null && addresses.hasMoreElements()) {
      InetAddress address = addresses.nextElement();
      if (!address.isLoopbackAddress()) {
        hostName = address.getHostName();
      }
    }
  }
}
person constantlearner    schedule 08.11.2013
comment
К сожалению, ни один из подходов не сработал. Первый вернул IP-адрес, а второй вернул имя хоста, с которого запущено мое приложение. Возможно, я не очень хорошо объяснил. Я хотел бы получить имя машины удаленных пользователей. - person GoAlves; 08.11.2013
comment
вы можете попробовать request.getRemoteHost() - person constantlearner; 09.11.2013
comment
также вернул IP. но что я действительно хотел бы знать, так это почему мой код работает так, как я хочу, в 95% случаев, а в остальных 5% возвращается только IP-адрес - person GoAlves; 09.11.2013
comment
Пожалуйста, посмотрите мой ответ, почему это происходит - person constantlearner; 09.11.2013
comment
Наконец-то я получил решение вашего вопроса, просто попробуйте фрагмент кода - person constantlearner; 09.11.2013
comment
Этот код по-прежнему получает собственные имена хостов сервера. Другие ваши ответы то же самое. Не отвечайте несколько раз, пожалуйста, удалите. - person user207421; 10.11.2013

Вам нужно будет использовать следующую функцию, чтобы получить удаленный адрес/имя хоста:

request.getRemoteHost();
person Pritam Banerjee    schedule 30.04.2016

иногда приложение возвращает IP-адрес вместо имени

Как указано в этот ответ SO :

Проблема может заключаться в том, что request.getRemoteHost() выполняет обратный поиск DNS вместо того, чтобы брать его из заголовков HTTP; если ему не удается найти информацию DNS с использованием IP-адреса, он возвращает IP-адрес в виде строки.

person Catalan Cabbage    schedule 20.01.2020