【问题标题】:Get client computer name in web application在 Web 应用程序中获取客户端计算机名称
【发布时间】:2015-11-27 15:43:24
【问题描述】:

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

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

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

然后我尝试将主机名保存在环境 TEMP 目录中,该目录在 Firefox + Linux + Java7 中有效,但在 Firefox + Windows + Java8 中无效:小程序无法运行,此外,我还没有t 找到了访问定义的 TEMP 目录并在 JavaScript 中读取文件的方法。

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

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

谢谢。

【问题讨论】:

    标签: javascript java firefox applet client


    【解决方案1】:

    您的 Javawebstartet 应用程序可以托管 Websocket 侦听器。因此,您可以通过 Websocket 从 javascript 访问此应用程序。仅适用于 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)
    

    【讨论】:

    • 您需要代码示例吗?我应该在 java/android、C# 和 JS 中有一些
    • 好的。我添加了我的代码参考和一些我使用的代码。我无法在我的项目中使用此解决方案,因为这不适用于 https
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      如果你有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 可解析主机名。
      【解决方案4】:

      试过 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 可解析主机名。
      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-27
        • 1970-01-01
        • 1970-01-01
        • 2012-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多