如何从HTTP请求中获取MAC地址?

37

有人能给我一些关于从HTTP请求中获取用户MAC地址的指导吗?

这些用户将来自我的网络外部


抱歉,忘记说明它是一个ASP.NET网站。谢谢。 - Richard.Gale
可能是获取ASP.NET网站用户的MAC地址的重复问题。 - Oded
-1 已经在之前的Richard问题中回答过了(http://stackoverflow.com/questions/3308258/iis7-restrict-website-access-by-mac-address)。 - Mad Scientist
Fabian,你认为实现双因素身份验证有更好的方法吗? - Richard.Gale
1
客户端证书 - 即使可能,MAC地址也可以更改。 - Chris Diver
3个回答

56
这取决于你的网络设置。但很可能不行。
以下是关于以太网和IP的简要回顾。MAC地址是网卡的唯一地址,用于识别数据包属于网络段上哪个用户。您可以使用ARP获取IP地址的MAC地址,但仅当您在同一网络段时才能按预期运行。
所以问题是,什么是网络段?这取决于您使用的技术,但以下是常见情况。整个无线网络是一个网络段。网络中的每个用户都可以通过以太网与其他用户交流。对于基于电线的网络,这取决于硬件。如果您拥有老式BNC或集线器,则具有所有用户的网络段。同样,每个用户都可以与任何其他用户交流。使用网络中的交换机时,网络段仅限于连接您到交换机的电缆。在这里,您只能通过以太网与交换机交流,其他用户至少需要IP地址。
遗憾的是,在HTTP(建立在TCP / IP之上)的大多数情况下,您与用户99.99%的时间不在同一网络段中。您可以使用ARP,但只会获取第一个跳跃的MAC地址。更糟糕的是,根据您的硬件,您甚至可能不在基于以太网的IP网络中;例如ATM...

11
嗨,肖恩,感谢你让情况更加混乱了!开玩笑,说真的,这是一篇很有启发性的帖子,干杯。 - Richard.Gale
什么?啥?除非你使用一种被认为侵犯用户基本隐私的技术,比如在用户系统上安装插件/Active-X/木马,否则答案是:不行,从技术上讲不可能。我只是试图解释为什么……也许你或其他人可以学习和理解…… - rioki
1
我认为这并不完全正确:交换机的端口不属于同一网段,但是可以通过以太网在不同的交换机端口之间进行通信。交换机上有一个ARP缓存来实现这一点。 - EFraim

2
我认为在ASP.NET中没有办法做到这一点。
MAC是TCP数据包的属性,在HTTP层级别上没有数据包或MAC地址(例如,一个单独的HTTP请求可能由几个TCP数据包组成)。
你可以尝试使用数据包嗅探器(如WireShark)捕获TCP数据包,然后分析它们以提取MAC地址并将其映射到HTTP请求。
无论如何,除非用户与您的服务器在同一网络段内,否则您将无法获取任何有用的数据。
更新:正如评论中指出的那样,我混淆了网络层级。 MAC地址是以太网帧的属性,而不是TCP数据包。 然而,结论仍然是正确的。

5
MAC地址在TCP数据包中?从什么时候开始的?MAC地址来自更低层的传输层,甚至不在IP数据包头中。 - Christopher Creutzig
1
是的,MAC地址非常低级。 - Richard.Gale
他的意思是一般的数据包。在TCP的情况下,你没有数据包,而是一个流。在IP的情况下,你有帧...通常情况下,用户模式代码无法访问其中任何一个。 - rioki
@ChristopherCreutzig 只有一个传输层。 - shiva
@shiva 正确的,是我不对。传输层不使用MAC地址,这些仅在网络层使用。我还应该说,它并不是“较低的”... - Christopher Creutzig

1
除非您打算创建一个ActiveX组件,否则这是不可能的,而且它只能在IE上运行。

一个ActiveX组件不是不可能,但MAC地址可用吗? - Richard.Gale
验证与数据库中保存的值相比较? - Richard.Gale

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