【问题标题】:Getting information of client through JavaScript or dll or jar file?通过 JavaScript 或 dll 或 jar 文件获取客户端信息?
【发布时间】:2017-09-24 07:07:12
【问题描述】:

我在 JSP 中为我们的客户构建了一个系统。现在我想在用户许可的情况下收集客户信息。以下信息将从我们的客户处获得。

1. UUID 2. Hard disk serial number 3.Ip Address 4. MAC ADdress 5.PC AND OS info

目前这是通过 activeX 对象完成的。但是这个系统只能在internet explorer 浏览器中运行。我想更改系统,使其独立于浏览器。

我想到了几种架构。让我简要讨论一下这些架构:

第一个架构(通过 JavaScript):

当客户访问我们的网页时,将打开一个弹出窗口,说明 “你允许运行这个脚本吗?”。如果用户允许,则脚本将驻留在客户端 pc 中。该脚本将负责获取有关客户端 pc 的信息并将信息发送到我们的服务器。 您始终可以认为客户端将授予运行脚本的权限,因为我们将指示我们的客户端运行脚本。

第二个架构(通过 jar 文件)

一个 jar 文件将驻留在每个客户端 PC 中。该文件将负责从客户端 pc 获取信息并将信息发送到我们的服务器。每个客户都将获得一个软件。安装该软件后,将安装 jre,并且 jar 文件将驻留在特定目录中。 另一种将 jar 文件驻留在客户端 pc 中的方法,当客户端访问我们的 web 应用程序时,是否可以将 jar 文件推送到客户端 pc?我们希望得到他们的许可。

第三种架构(通过 dll 文件):

用 C# 编写的 dll 文件将驻留在客户端 pc 中。此 dll 文件将负责从客户端 pc 获取信息。当客户第一次访问我们的 web 应用程序时,他们会询问是否要授予他们运行 dll 的权限?如果他们给予许可,那么dll文件将保存在客户端电脑上,并负责提供客户端电脑的信息。

上述架构是否有意义?你能告诉我上述架构的一些优点和缺点吗?如果上述架构/方法无法完成我必须完成的任务,我可以采取哪些步骤来获取客户信息?

我在 google 中对这个主题进行了很多研究。我了解到现代浏览器限制从客户端获取信息。但我想在获得客户宝贵许可的情况下获得客户信息。

我尝试过的:

我尝试过使用几个 js 库来做到这一点,例如 clientjs 、 nodejs 。但是clientjs不能给出一些信息,比如UUID,硬盘序列号。我编写了一个 java 代码(桌面环境),它可以获取 pc 的所有信息。但我不能从我的 jsp 页面调用此代码。我还能够编写一个可以输出客户信息的 C# 代码。但我不能从我的 jsp 页面调用它。

最后一点:

希望我想告诉每个人都清楚。请帮助我完成这项任务,或者至少给我一些想法/建议,告诉我该怎么做!

最后要提醒大家的是,我们的系统正在收集使用 ActiveX 的用户的信息。这只是 IE 绑定的。我只想做到独立于浏览器。

【问题讨论】:

    标签: javascript java c# jsp dll


    【解决方案1】:

    您不能只在浏览器中执行 dll 方法(这是出于安全原因)。为了在浏览器中执行一些已编译的代码,您必须使用插件。

    这个问题有几种解决方法。经过一些链接后,似乎可以通过以下选项。

    选项 1:

    选项 2:

    为那些浏览器创建插件是使用 NPAPI 编写的。 How to write a browser plugin?

    选项 3:

    编写签名的小程序以调用从 html 或任何 Web 应用程序运行的 dll。它几乎可以在所有浏览器上运行。这是示例的链接。

    Escape the sandbox: Access native methods from an applet

    选项 4:

    使用 EdgeJS 可以完成相同的任务。您可以在 Call Function from DLL loaded in front-end javascript (load dll in clientside javascript) 找到答案。 诀窍是在 V8 和 CLR 之间编组函数,并在事件触发时将消息发送到 javascript。

    Call Function from DLL loaded in front-end javascript (load dll in clientside javascript)

    选项 5:

    构建一个 C# 应用程序(如果您使用 .NET,则仅适用于 Windows,如果您仅使用 CoreCLR,则适用于所有平台),该应用程序侦听滑动并触发事件以在所有连接的 websocket 上发送数据。

    Need to call client side DLL from browser

    选项 6:

    您可以使用 C# 编写的客户端应用程序连接到 JS websocket,然后传输数据。 WebSocket 可以检查特定的数据块,并按照您想要的方式对其进行处理。

    我已按照我在使用指纹扫描仪的项目中描述的方式使用它。效果很好!如果你添加一点 Crypto,那就更好了!

    Call Function from DLL loaded in front-end javascript

    选项 7:

    1. 创建可以安装在用户计算机上的应用程序。
    2. 在此应用程序中运行嵌入式 HTTP 服务器。
    3. 确保嵌入式 HTTP 服务器返回 CORS 标头。
    4. 在 HTTP 服务器 API 中写入逻辑和端点。
    5. 使用页面上的 JS 查询嵌入式 HTTP 服务器(如果它运行的话)。

    遗言:

    ActiveX 只是在 IE 中实现浏览器插件的一种方法。所有其他浏览器使用不同的插件接口。 然后,如果用户将在浏览器中安装您的插件 - 该插件将在 JS 中可用,您可以使用它在 dll 中执行某些功能。

    【讨论】:

      猜你喜欢
      • 2011-02-10
      • 2016-04-12
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 2018-11-28
      • 1970-01-01
      相关资源
      最近更新 更多