5

我正在 Intranet 上的 Windows Server 2008 上运行我的应用程序。

登录应用程序尝试从请求中获取主机名以验证用户。但是,有时应用程序返回 IP 地址而不是名称,一段时间后,应用程序无需执行任何操作即可解析名称,一切正常......

这是我用来获取主机名的代码:

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

这是因为 Intranet 配置(DNS!?),还是我的代码有问题,或者巫术什么的?

4

3 回答 3

6

第一次尝试

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();
      }
    }
  }
}
于 2013-11-08T15:35:39.823 回答
2

您将需要使用以下函数来获取远程地址/主机名:

request.getRemoteHost();
于 2016-04-30T03:59:50.667 回答
0

有时应用程序返回 IP 地址而不是名称

这个 SO 答案中引用:

问题可能是因为 request.getRemoteHost() 进行了反向 DNS 查找,而不是从 HTTP 标头中获取;如果使用 IP 查找 DNS 信息失败,则将 IP 地址作为字符串返回。

于 2020-01-20T12:50:51.667 回答