2010-07-22 2246 views
23

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

用户将从外部我的网络。

+0

嗨, 对不起,忘了把它,这是一个asp.net网站。 干杯 – 2010-07-22 13:07:17

+0

[获取ASP.NET网站用户的MAC地址的可能的副本](http://stackoverflow.com/questions/1342738/get-the-mac-of-asp-net-website-user) – Oded 2010-07-22 13:09:02

+0

- 1已经在Richard的前一个问题中得到解答(http://stackoverflow.com/questions/3308258/iis7-restrict-website-access-by-mac-address)。 – 2010-07-22 13:12:43

回答

37

这取决于您的网络设置。但可能没有。

以下是关于以太网和IP的简短回顾。 MAC地址是网卡的唯一地址。它用于识别网络上的哪个用户是一个数据包。您可以使用ARP来获取IP地址的MAC地址。 但是,只有当您处于同一个网段时,才能按预期工作。

所以问题是,什么是网段?这取决于你使用的技术,但这里是常见的情况。整个无线网络是一个网段。网络上的每个用户都可以通过以太网与其他用户通话。在基于电线的网络上,这取决于硬件。如果您拥有良好的旧BNC或集线器,则您拥有一个具有所有用途的网段。每个用户也可以与其他人交谈。通过网络中的交换机,网段只是将您连接到交换机的电缆。在这里,您只能通过以太网与交换机通话。每个其他用户至少需要IP。

很糟糕的是,大多数情况下,基于TCP/IP构建的HTTP,99.99%绝不会与用户位于同一网段。您可以使用ARP,但只会获得第一跳的MAC地址。它会更好,取决于您的硬件,甚至可能不在基于以太网的IP网络上; ATM例如...

+6

嗨肖恩,谢谢你进一步混淆了这种情况!大声笑,没有认真,良好的信息后,欢呼声 – 2010-07-22 14:07:50

+0

咦?世界卫生大会?除非您使用的技术可能被认为违反了用户的基本隐私权,例如在用户系统上安装plugin/active-x/tojan,则答案为:**否,技术上不可行**。我只是试图解释为什么......也许你或别人可以学习和理解...... – rioki 2010-07-22 18:41:32

+1

我认为这是不完全正确的:交换机的端口不是相同的段,但是可以通过以太网在不同的交换机之间进行通信端口。在交换机上有一个ARP缓存。 – EFraim 2015-09-27 21:54:16

0

这是不可能的,除非你打算创建一个ActiveX组件,在这种情况下它只能在IE上运行。

+0

activeX组件不会出现问题,但MAC地址是否可用? – 2010-07-22 13:17:24

+0

可用于什么? – nos 2010-07-22 13:22:46

+0

验证与数据库中保存的值? – 2010-07-22 13:32:35

1

我不认为有一种方法可以在ASP.NET中执行此操作。
MAC是TCP数据包的属性,并且在HTTP级别上没有数据包或MAC(例如,一个HTTP请求可能由多个TCP数据包组成)。

您可以尝试使用数据包嗅探器(如WireShark)来捕获TCP数据包,然后分析它们以提取MAC并将它们映射到HTTP请求。

无论如何,除非用户与服务器位于同一网段,否则不会获得任何有用的数据。

UPD。正如评论中指出的那样,我混淆了网络层。 MAC地址是Ethernet frame的属性,而不是TCP数据包。
但是,结论仍然正确。

+4

MAC地址在一个tcp数据包中?从何时起? MAC地址来自低得多的传输层,甚至不在IP数据包报头中。 – 2010-07-22 13:39:14

+0

是的,MAC地址是非常低的水平 – 2010-07-22 14:08:25

+0

他的意思是一般的数据包。在来自TCP的情况下,您没有数据包,它是一个数据流。在来自IP的情况下,您有框架...并且通常您无法在用户模式代码中访问任何这些框架。 – rioki 2010-07-22 18:45:26