【问题标题】:Get client MAC address from express request object从快速请求对象中获取客户端 MAC 地址
【发布时间】:2020-07-16 00:58:13
【问题描述】:

我正在尝试从传入的请求对象中获取 MAC 地址。我的应用程序在 nginx 代理后面运行,因此为了获取 IP 地址,我使用以下语法,它工作正常。

var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;

同样有一种方法可以获取已发出请求的 MAC 地址。遇到这个包https://www.npmjs.com/package/getmac,我不确定这是否有帮助。从根本上说,我需要获取每个传入请求的 MAC 和 IP 地址。

【问题讨论】:

  • HTTP 请求不包含任何 MAC 地址?
  • 你需要它做什么?
  • @Bergi 我正在尝试获取 IP 和 MAC 地址以识别发出请求的最终用户设备。我正在开发的应用程序处理订阅,我正在尝试捕获在给定日期进行的订阅数量,因此当从桌面或任何手持设备发出请求时,对于每个请求,我都会尝试收集此信息
  • 可以获取IP,但不能获取MAC地址。它不公开是有充分理由的。如果您想区分台式机和手持设备,那么您应该使用其他机制。
  • 感谢@Bergi,我可能需要使用“用户代理”来识别发出请求的设备

标签: javascript node.js express


【解决方案1】:

这是不可能的。 MAC 地址不会通过 Internet 传输。

请参阅:https://superuser.com/questions/510920/is-my-mac-address-public-when-browsing-the-internethttps://security.stackexchange.com/questions/36583/can-a-website-still-detect-my-real-mac-address-even-if-i-use-different-virtual-m

(而getmac 只会为您提供服务器的网络接口的 MAC。)

【讨论】:

  • 所以在这种情况下,由于我正在尝试获取发出请求的设备的 MAC 地址,是否有任何插件或软件包可以帮助满足此要求。
  • 正如我刚才所说,这些信息在你身边不存在,所以你无法获得MAC地址,故事结束。 - (只有当您可以控制发送请求的设备时,您当然可以添加代码以将 MAC 地址作为参数发送。)
  • 没有什么是不可能的。另一个问题可能是:Paypal 如何获取其客户的 mac 地址,并将其用作帐户安全程序?
  • 我认为他们无法仅使用您的浏览器获取您的 MAC 地址 - 也许他们使用您必须授权的 Java 小程序,或者在客户端计算机上运行的其他代码?关键是,“没有什么是不可能的”不会让信息凭空出现。 MAC 地址不会通过 Internet 传输 - 您的路由器可以看到它,如果您直接连接(例如通过 3G),则您的 ISP 可以看到它,但下一跳已经不能看到,他们会看到您的路由器或 ISP 的 MAC 地址等。没有任何东西将您的 MAC 地址转发到链中的下一个网络硬件。
  • 如果是直接连接客户端呢?
【解决方案2】:

您无法从请求中获取它,但您可以先获取它,然后将其存储在 req.session 中。

如何获取mac地址:

const os = require( 'os' );
var mac_ip = os.networkInterfaces()['en3'][3]['mac'];
console.log('ip_test: ', ip_test);
req.session.macip = mac_ip;

您也可以登录networkInterfaces 来检查您想要的一切:

var networkInterfaces = os.networkInterfaces();
console.log( networkInterfaces );

注意:此方法只会获取运行节点进程的设备的 MAC。如果从您的服务器运行,此方法将获取您服务器的 MAC 地址,而不是发出请求的客户端的 MAC 地址。

【讨论】:

    猜你喜欢
    • 2017-05-01
    • 2019-01-04
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 2016-07-27
    • 2017-10-28
    相关资源
    最近更新 更多