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

3
我有一个Java Web应用程序,需要知道连接到该应用程序的客户端计算机名称。我的第一个想法是通过JavaScript获取它,并填充一个隐藏的表单字段,但经过一番搜索,发现JS无法访问该信息。
然后我尝试使用applet并通过JavaScript访问其方法。这在Firefox上似乎可以运行,但较新版本的Chrome不支持applets。
然后我考虑切换到Java Webstart应用程序,据我所知,它应该在Chrome下工作,但在这种情况下,由于Webstart应用程序在浏览器外部运行,JavaScript无法访问其方法。
然后我尝试将主机名保存在环境TEMP目录中,这在Firefox + Linux + Java7中有效,但在Firefox + Windows + Java8中无效:applet根本不运行,此外,我还没有找到一种在JavaScript中访问已定义的TEMP目录并读取文件的方法。
到这个时候,我已经没有想法了,希望从你们那里得到一些建议。如何实现这一点?我是否错过了任何明显的解决方案?
请注意,我需要计算机定义的主机名,而不是计算机IP通过DNS解析的结果。
谢谢。
5个回答

2
您的Javawebstartet应用程序可以托管Websocket监听器。因此,您可以通过javascript从Websocket访问此应用程序。仅适用于http,不适用于https。
在Java端使用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)

你需要代码示例吗?我应该有一些Java/Android、C#和JS的。 - Dominik Pfefferle
好的。我添加了我的代码引用和一些我使用的代码。我无法在我的项目中使用此解决方案,因为它不适用于https。 - Dominik Pfefferle

1

您无法使用JavaScript获取计算机名称。由于安全原因,JavaScript无法访问计算机名称。


0

如果你有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

你好:谢谢,但这行不通;我需要计算机定义的主机名,而不是被服务器看到的IP的DNS可解析主机名。 - Level15

0

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


0

尝试过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);
}    

你好:谢谢,但这不起作用;我需要计算机定义的主机名,而不是服务器看到的IP的可解析DNS主机名。 - Level15

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接