【问题标题】:Get hostname from request从请求中获取主机名
【发布时间】:2013-11-20 16:13:09
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 为什么会有这样的反思?
  • 对反射感到抱歉。这是我尝试的另一种方法的一些“剩余”代码。我的错。

标签: java networking inetaddress


【解决方案1】:

第一次尝试

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();
      }
    }
  }
}

【讨论】:

  • 不幸的是,这两种方法都不起作用。第一个返回 IP 地址,第二个返回运行我的应用程序的主机名。也许我没有很好地解释自己。我想要的是获取远程用户机器的名称。
  • 你可以试试 request.getRemoteHost()
  • 也返回了 IP。但我真正想知道的是为什么我的代码在 95% 的时间里都按照我想要的方式工作,而另外 5% 的时间只返回 IP 地址
  • 请看我的回答为什么会发生
  • 最后我得到了解决你问题的方法,只需尝试代码 sn-p
【解决方案2】:

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

request.getRemoteHost();

【讨论】:

    【解决方案3】:

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

    引用自this SO answer:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      相关资源
      最近更新 更多