获取MAC地址

3

如何在 Linux 主机(nginx)上获取访问者的 MAC 地址?

从以太网用户处获取。

谢谢。


既然你把问题从PHP上改了...首先,访问者和主机是否在同一局域网上? - Dan J
那么,根据我引用的另一个问题(https://dev59.com/2nA75IYBdhLWcg3waIQJ),你基本上没什么运气了。你需要 MAC 地址是为了什么目的?也许我们可以建议一种替代方案。 - Dan J
@djacobsen 需要这个来禁止垃圾邮件发送者。 - James
如果你有正确的工具(MAC欺骗……很有趣),在某种程度上可以“更改”MAC地址,所以这不会百分之百有效。尽管如此,与IP禁止相比,它可能会更好一些,因为知道如何更改自己的MAC地址的人明显较少。 - Ricky Cook
5个回答

8
您无法通过PHP获得该信息。
网络协议是以堆栈的形式使用的。在进行HTTP通信时,您的Web服务器使用HTTP协议,负责高级通信。该协议实现在TCP协议之上(它提供流式连接和端口号),而TCP协议又实现在IP协议之上(v4或v6,用于标识IP地址),最后实现在以太网协议之上。
以太网协议是您需要处理的协议。它具有源MAC地址和目标MAC地址。然而,不幸的是,它存在许多问题。
首先,它传递的数据可能很难访问:我说“可能”,因为我从未遇到过如何做到这一点。
其次,就像当客户端访问您的站点时会获取其路由器地址一样,您将在以太网层获取客户端路由器的MAC地址。除非他们不经过任何路由器(这只会发生在您的服务器直接与客户机器连接且没有任何路由器干扰的情况下,因为有很多路由器将数据中继到互联网的其他部分),否则您收到的MAC地址将不是客户端的。
第三,Apache永远不会尝试访问该数据。由于PHP被“沙箱化”到Apache提供的网络环境中,因此您无法回到以太网协议。
因此,从PHP访问访问者的MAC地址是不可能的。

3

你无法通过PHP来获取它,因为它不包含在HTTP中。


3

更一般的问题在这里。由于所有PHP都必须使用(我假设这是在您的Web服务器上运行的PHP),只有HTTP请求,因此您无法获取MAC地址。这需要在访问者端运行的内容。


1

这可能行得通,也可能不行。我知道它可以在局域网客户端上工作,但对于外部客户端来说可能是不正确的。我对网络不是很了解,但值得一试,对吧?

如果您在Windows或Linux上执行arp -a命令,它将打印出您的arp记录,然后您可以解析mac地址。

除此之外,据我所知,Apache(因此PHP)不会在其env vars中提供MAC地址。

*编辑:抱歉,那个方法行不通...更好的工具是arping,但那只会给你路由器的mac地址。

如果要实现这个功能,则客户端需要直接连接到服务器,没有路由器在中间...

但是如果是这种情况,那么arping就可以使用...我不知道是否有更好的工具,但是为了获取一个mac地址去做ping(使用root)似乎有点浪费。


0

如果我没记错的话,MAC地址只对网络提供商可见(例如,您的互联网主机可以看到路由器的MAC地址),我认为您无法使用PHP获取它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接