3

我如何知道访问者在 linux 主机 (nginx) 上的 MAC 地址?

来自以太网用户。

谢谢。

4

5 回答 5

8

你无法通过 PHP 获得它。

网络协议在堆栈中使用。在进行 HTTP 通信时,您的 Web 服务器使用 HTTP 协议,负责高层通信。该协议在 TCP 协议(​​带来类似流的连接和端口号)之上实现,而后者又在 IP 协议(​​v4 或 v6,带来用于识别的 IP 地址)之上实现,在turn 是在以太网协议之上实现的。

以太网协议是您需要使用的协议。它同时具有源 MAC 地址和目标 MAC 地址。然而,最不幸的是,它存在很多问题。

首先,它传达的数据可能很难访问:我说“可能”是因为我从来没有偶然发现如何做到这一点。

其次,就像您在客户访问您的站点时获得客户的路由器地址一样,您在以太网级别获得客户的路由器 MAC 地址。除非它们不遍历任何路由器(只有当您的服务器直接连接到您的客户端计算机而没有任何路由器干扰时才会发生这种情况,因为那里有很多路由器将数据中继到 Internet 的其他部分),您收到的 MAC 地址不可能是您客户的。

第三,Apache 永远不会尝试访问这些数据。由于 PHP 被“沙盒化”到 Apache 提供的网络环境中,因此您无法回到以太网协议。

因此,无法通过 PHP 从网站访问访问者的 MAC 地址。

编辑似乎你已经从你的问题中取出了 PHP 部分。所以很明显,最后一点已经站不住脚了。

于 2010-11-18T23:05:08.250 回答
3

你不能用 php 得到它,它不包含在 http

于 2010-11-18T22:58:39.140 回答
3

更普遍的问题是这个。由于所有 PHP 都必须使用(我假设这是在您的网络服务器上运行的 PHP,这里)是 HTTP 请求,因此您将无法获取 MAC 地址。这需要在访问者这边运行一些东西。

于 2010-11-18T23:00:00.373 回答
1

这可能会,也可能不会。我知道它可以在 LAN 客户端上运行,但是对于外部客户端,它可能不正确。我不太了解我的网络,但值得一试,对吧?

如果您在 windows 或 linux 上执行 arp -a 命令,它将打印出您的 arp 记录,然后您可以为 mac 解析这些记录。

除此之外,据我所知,apache(以及php)不仅仅在其环境变量中给出mac地址。

*已编辑:抱歉,这行不通...更好的实用程序是 arping,但是它只会为您提供路由器的 mac。

如果你想这样做,客户端需要直接连接到你的服务器,中间没有路由器......

但是,如果是这种情况,那么 arping 将起作用...我不知道有更好的工具,但是仅对 mac 地址执行 ping(在 root 中)似乎有点浪费。

于 2010-11-18T23:02:59.733 回答
0

如果我是正确的(例如,您的互联网主机可以看到路由器的 MAC 地址),则 MAC 地址仅对网络提供商可见,不要认为您可以使用 php 获取它。

于 2010-11-18T22:59:19.227 回答