获取java

时间:2017-08-14 21:55:42

标签: java hostname

我正在使用jdk 8和weblogic服务器12 R2c。我的应用程序面向公众,我需要获取客户端的主机名。如果客户端主机名在允许访问应用程序的允许主机名列表中,则会向其显示一些特殊功能。现在我的问题是如何获取主机名。我尝试了下面的代码,我收到以下错误:

错误:

  1. java.net.UnknownHostException:234:343:343f:d1d34:a34:c%c3:45263:ab3c,449.6.087.678:IPv6地址无效
  2. java.net.UnknownHostException:14.5.254.458,65.15.5.15:未知错误。

    at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method) at java.net.InetAddress $ 2.lookupAllHostAddr(InetAddress.java:928) at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) at java.net.InetAddress.getAllByName0(InetAddress.java:1276) 在java.net.InetAddress.getAllByName(InetAddress.java:1192)

  3. 所有上述IP地址都是从我的服务器日志中获取的样本虚拟地址。

    String ipAdr = request.getHeader("X-FORWARDED-FOR");
      if (ipAdr == null) {
        ipAdr = request.getRemoteAddr();
      }
      InetAddress addr = null;
      String host = null;
      if (ipAddress != null) {
        addr = InetAddress.getByName(ipAdr);
        host = addr.getHostName();
      }
    

    请求可能来自代理服务器,在这种情况下如何获取域名。 上面的Tee位于为每个请求调用的过滤器代码中。

1 个答案:

答案 0 :(得分:0)

以下是我用来获取计算机主机名的代码段,有关为什么不应该使用IP地址获取主机名的信息,请参阅this答案。

public class App {
    private final static String HOSTNAME_COMMAND = "hostname";

    private static  String getHostName() throws IOException {
        Process process = Runtime.getRuntime().exec(HOSTNAME_COMMAND);
        BufferedReader inputStreamReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        BufferedReader errorStreamReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
        if (errorStreamReader.readLine() != null) {
            throw new RuntimeException(String.format("Failed to get the hostname, exception message: %s",
                    errorStreamReader.readLine()));
        }
        return inputStreamReader.readLine();
    }
}