【问题标题】:nodejs get mac address of clientnodejs获取客户端的mac地址
【发布时间】:2017-03-27 08:21:02
【问题描述】:

我使用 NodeJS 中的 net 模块创建了一个 Tcp 服务器,并尝试从每个客户端获取 mac 地址信息以生成 uuid。但是,在 Socket 对象中,没有关于它的信息。我也尝试从 arp 表中读取 mac 地址,但它也不起作用。还有其他方法可以解决吗?

【问题讨论】:

  • 这在生产环境中毫无意义。您不会看到客户端的实际 MAC 地址,但如果有的话,您最多会获得离您的服务器最近的路由器的 MAC 地址(在大多数情况下:服务器的默认网关)。这就是互联网的运作方式。因此,您将为来自本地网络之外的所有随机访问者生成相同的 UUID
  • 我明白了,谢谢@Psi

标签: node.js sockets tcp mac-address


【解决方案1】:

因为 MAC 地址属于 OSI 层的第 2 层,除非您在同一地址空间中,否则您将无法访问它,因为它会被路由器剥离。

说明

MAC 地址,属于7 OSI Layers 的第 2 层“数据链路层”。客户端的 MAC 地址仅对它们直接连接的路由器可见。

路由器将部分分解数据包以获取第 3 层“网络层”标头,以确定应将数据包发送到何处以及使用 IP 地址的位置。

然后,第 4 层“传输层”是您谈论特定协议的地方,例如 TCP。

因此,作为服务器,您无法获取客户端的 MAC 地址,除非您在第 2 层连接到您的客户端。

【讨论】:

  • 这不是问题的答案。这只是一个解释,在这种情况下没有解决方案
  • @Psi 这是完全可以接受的。这是有价值的信息。赞成。
【解决方案2】:

我之前在生产环境的教室里做过类似的事情。就我而言,我可以访问所有客户端计算机。要么您拥有对所有客户端的管理员访问权限,要么您可以以某种方式将客户端预注册到您的数据库中,您可以执行以下操作。如果不是,请忽略此答案。

  1. 创建另一个 NodeJs 程序,在客户端中托管一个 Web 服务(不要忘记实现某种安全性)。这个程序可能只是一个带有 getmac 节点模块的简单 ExpressJs。

  2. 将客户端的所有 IP 或域名注册到服务器数据库。可以是手动的,或者在我的情况下,当客户端打开时,它会自动向服务器发送请求以进行自我注册。 (如果需要,实现客户端-服务器验证)

  3. 当服务器需要客户端的 mac 时,服务器应用程序会向每个预先注册的客户端发送请求,以获取其 mac 地址或服务器需要客户端提供的任何其他信息。

【讨论】:

    【解决方案3】:

    node js中的Net客户端不提供mac地址。您可以选择:

    1- 发送@mac 你自己:我的意思是在客户端,当你与服务器建立连接时,你将 Mac 地址作为数据发送。

    2- 使用 socket.io insteed net 。它将为您提供所需的所有信息

    【讨论】:

    • 在我看来,您的解决方案 #1 是唯一的可能性。除非系统仅用于 Intranet 使用,否则检索 MAC 地址将无法正常工作。
    猜你喜欢
    • 1970-01-01
    • 2021-03-18
    • 2017-10-28
    • 2017-07-24
    • 2013-11-07
    • 2018-04-30
    • 2016-09-06
    • 2016-07-27
    • 2011-10-22
    相关资源
    最近更新 更多