在 Web 应用程序中获取客户端计算机名称

Get client computer name in web application

我有一个 Java 网络应用程序需要知道连接到它的客户端的计算机名称。我的第一个想法是通过 JavaScript 获取它并用它填充一个隐藏的表单字段,但经过一些挖掘后,似乎 JS 无法访问该信息。

然后我尝试使用小程序并通过 JavaScript 访问小程序方法。这似乎适用于 Firefox,但较新的 Chrome 版本不适用于 运行 小程序。

然后我考虑切换到 Java Webstart 应用程序,据我所知,它应该在 Chrome 下工作,但在这种情况下,由于 Webstart 应用程序 运行在浏览器之外,Java脚本无法访问它的方法。

然后我尝试将主机名保存在环境 TEMP 目录中,这在 Firefox + Linux + Java7 中有效,但在 Firefox + Windows + [=24 中无效=]8: 小程序只是没有 运行,另外,我还没有找到一种方法来访问定义的 TEMP 目录并读取 JavaScript 中的文件。

在这一点上我没有想法,很想听听你们的一些意见。关于如何实现这一目标的任何提示?我错过了任何明显的解决方案吗?

请注意我需要计算机定义的主机名,而不是计算机的 IP 通过 DNS 解析的名称。

谢谢。

如果你有ip添加你可以做:

InetAddress inetAddress =InetAddress.getByName("127.64.84.2");//get the host Inet using ip
System.out.println ("Host Name: "+ inetAddress.getHostName());//display the host

尝试过 servlet?

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { 

    final String hostname = request.getRemoteHost(); // hostname
    System.out.println("hostname"+hostname);

    String remoteMachineName = null;
    String remoteMachineAddress = request.getRemoteAddr();
    System.out.println("remoteMachineAddress: " + remoteMachineAddress);
    try {
        InetAddress inetAddress = InetAddress.getByName(remoteMachineAddress);

        remoteMachineName = inetAddress.getHostName();
        System.out.println("remoteMachineName: " + remoteMachineName);
       } 
    } catch (UnknownHostException e) {

        }

    System.out.println("remoteMachineName: " + remoteMachineName);
}    

您的 Javawebstartet 应用程序可以托管 Websocket 侦听器。因此,您可以从 javascript 通过 Websocket 访问此应用程序。仅适用于 http,不适用于 https

在JavaSide使用http://java-websocket.org/

的websocket实现

在Javascript我用https://code.google.com/p/jquery-websocket/ 你也可以在那里找到例子。 websocket 通信是异步的。使用响应的回调方法创建 WS

var ws = $.websocket("ws://127.0.0.1:" + lport + "/", {
            events: {
                say: function (e) {
                    //showMsg(e.data);

                }
            }
        });

并用

调用服务器
ws.send(0, jsonData)

您可以使用 InetAddress.getLocalHost().getHostName(),它不会根据文档从 DNS 解析主机名

您无法使用 javascript 获取计算机名称。 Javascript 出于安全原因无法访问计算机名称