这是我的问题:我有一个在服务器端,JavaScript前端运行NodeJS的应用程序。用户从不同的机器登录到Web应用程序(显然),我需要知道他们自己记录的是什么机器。有没有办法用JavaScript或其中一个框架和库来了解这些信息?我知道有"os"
及其方法hostname()
可以通过NodeJS服务器端了解这一点,但这会返回服务器的机器名 。
答案 0 :(得分:1)
服务器将知道HTTP请求来自用于在Node.JS中托管服务器的任何API的IP地址很可能会暴露它(ExpressJS有request.ip
)。然后,您可以执行反向DNS查找以获取主机名。
这将为您提供名称,假设计算机直接连接到您的服务器并且不是NAT或代理。
如果失败了,你可以来的壁橱就是use client-side JS to discover the IP address,然后用(例如)Ajax将它发送到服务器。
答案 1 :(得分:1)
您需要让客户将其发送给您。
我不知道浏览器中会获取计算机名称的方法,但如果请求来自其他服务器,则可以让该服务器使用os
发送计算机名称(例如,一些自定义标题X-Client-Machine-Name
或你提出的任何酷名称......)
如果请求来自浏览器,则可以选择查看向您发送请求的客户端的IP(请参阅How to determine a user's IP address in node)。如果您的计算机都在专用网络中且IP不经常更改,则此功能非常有用。但是,鉴于大多数网络的默认值是动态IP,您可能会遇到一些配置问题(但它应该可行)。您可能必须维护一些IP->机器名称映射表(这可以使用您希望向服务器发送请求的每台计算机上的某个守护程序动态构建,以便在启动时更新您的表)。但这有点费力。
答案 2 :(得分:0)
不确定您的用例是什么,但您可以使用会话ID来了解他们正在使用的浏览器会话。除此之外,你可以使用像Fingerprintjs2这样的东西:
https://github.com/Valve/fingerprintjs2
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/fingerprintjs2/1.4.1/fingerprint2.min.js"></script>
JS:
new Fingerprint2().get(function(result, components) {
// do something with result
});