Java InetAddress类返回不是访问者的计算机名称问题

InetAddress addr = InetAddress.getLocalHost();
String hostname = addr.getHostName();
项目部署服务器了,地址为http://192.168.74.1:8090/index,张三访问这个地址返回服务器计算机名,王五访问这个地址返回这个服务器计算机名,李四访问这个地址返回服务器计算机名

该回答引用GPTᴼᴾᴱᴺᴬᴵ
在 Java 中,使用 InetAddress.getLocalHost() 方法可以获取当前主机的 IP 地址和主机名。所以,当每个用户访问 http://192.168.74.1:8090/index 时,使用这段 Java 代码获取主机名会得到相同的结果,即部署该项目的服务器的计算机名。

因此,张三、王五和李四访问 http://192.168.74.1:8090/index 返回的主机名都相同,即服务器计算机名。这是因为服务器只有一个 IP 地址(在这个例子中是 192.168.74.1),并且所有的请求都通过该 IP 地址进行路由。

如果你需要获取访问者本地电脑的计算机名,你需要使用客户端脚本语言(如 JavaScript)在浏览器中执行相应的脚本代码,获取本地计算机名并在页面中显示。但需要注意的是,这种方式需要浏览器支持执行客户端脚本,并且用户需要授权允许执行该脚本。

这是获取本地机器的IP地址的方法,如果想获取访问者的,可以通过request对象来获取,关键代码如下:

/**
     * 获取客户端IP
     * 
     * @param request 请求对象
     * @return IP地址
     */
    public static String getIpAddr(HttpServletRequest request)
    {
        if (request == null)
        {
            return "unknown";
        }
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
        {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
        {
            ip = request.getHeader("X-Forwarded-For");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
        {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
        {
            ip = request.getHeader("X-Real-IP");
        }

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
        {
            ip = request.getRemoteAddr();
        }

        return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip);
    }

如果想获取客户端访问ip地址, 需要使用java的web api, 需要从HttpServletRequest 对象获取, 可以参考一下:

String ip = request.getHeader("X-Forwarded-For");
  if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
   ip = request.getHeader("Proxy-Client-IP");
  }
  if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
   ip = request.getHeader("WL-Proxy-Client-IP");
  }
  if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
   ip = request.getHeader("HTTP_CLIENT_IP");
  }
  if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
   ip = request.getHeader("HTTP_X_FORWARDED_FOR");
  }
  if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
   ip = request.getRemoteAddr();
  }
System.out.println("client ip : " + ip);