如何从 HTTP 请求中获取 MAC 地址?
Posted
技术标签:
【中文标题】如何从 HTTP 请求中获取 MAC 地址?【英文标题】:How can I get a MAC address from an HTTP request? 【发布时间】:2011-03-19 13:22:10 【问题描述】:谁能给我一些关于从 HTTP 请求中获取用户 MAC 地址的指示?
用户将来自我的网络外部。
【问题讨论】:
嗨,对不起,忘了说它是一个 asp.net 站点。干杯 Get the MAC of ASP.NET website user. 的可能重复项 -1 已在 Richard (***.com/questions/3308258/…) 的上一个问题中回答。 F***,你认为这是实现 2 因素身份验证的更好方法 客户端证书 - 即使有可能,MAC 地址也可以更改。 【参考方案1】:这取决于您的网络设置。但可能没有。
这是关于以太网和 IP 的简短复习。 MAC地址是网卡的唯一地址。用于识别报文是针对该网段的哪个用户的。您可以使用 ARP 获取 IP 地址的 MAC 地址。 但这只有在您位于同一网段时才能按预期工作。
那么问题来了,什么是网段?这取决于您使用的技术,但这里是常见的情况。整个无线网络就是一个网段。网络上的每个用户都可以通过以太网与其他所有用户交谈。在基于有线的网络上,这取决于硬件。如果您有良好的旧 BNC 或集线器,那么您将拥有一个具有所有用途的网段。同样,每个用户都可以与任何其他用户交谈。对于网络中的交换机,网段只是将您连接到交换机的电缆。在这里您只能通过以太网与交换机通信。每个其他用户至少需要 IP。
太糟糕了,在大多数情况下,使用基于 TCP/IP 的 HTTP,您 99.99% 从未与您的用户处于同一网段。您可以使用 ARP,但只会获取第一跳的 MAC 地址。更好的是,根据您的硬件,您甚至可能不在基于以太网的 IP 网络上;以提款机为例……
【讨论】:
嗨,肖恩,感谢您进一步混淆了情况!大声笑,不认真,内容丰富的帖子,干杯 嗯?世界卫生大会?除非您使用一种可以被认为侵犯用户基本隐私的技术,例如在用户系统上安装插件/active-x/tojan,否则答案是:不,技术上不可能。我只是试图解释为什么......也许你或其他人可以学习和理解...... 我认为这并不完全正确:交换机的端口不是同一个网段,但是可以通过以太网在不同的交换机端口之间进行通信。为此,交换机上有一个 ARP 缓存。【参考方案2】:我认为在 ASP.NET 中没有办法做到这一点。 MAC 是 TCP 数据包的属性,在 HTTP 级别上没有数据包或 MAC(例如,单个 HTTP 请求可能由多个 TCP 数据包组合而成)。
您可以尝试使用数据包嗅探器(如 WireShark)来捕获 TCP 数据包,然后分析它们以提取 MAC 并将它们映射到 HTTP 请求。
无论如何,除非用户和你的服务器在同一个网段,否则你不会得到任何有用的数据。
UPD。正如 cmets 中所指出的,我混合了网络层。 MAC 地址是Ethernet frame 的属性,不是 TCP 数据包。 然而,结论仍然是正确的。
【讨论】:
MAC地址在tcp包里?从何时起? MAC 地址来自低得多的传输层,甚至不在 ip 数据包头中。 是的,MAC地址级别很低 他的意思是一般的数据包。在来自 TCP 的情况下,您没有数据包,它是一个流。在来自 IP 的情况下,您有框架...通常您无法在用户模式代码中访问其中任何一个。 @ChristopherCreutzig 只有一个传输层。 @shiva 正确,我的错。但是,传输层不使用 MAC 地址,它们仅用于网络层。我还应该说,这并没有“低很多”……【参考方案3】:这是不可能的,除非你打算创建一个 ActiveX 组件,在这种情况下它只能在 IE 上工作。
【讨论】:
一个activeX组件不是不可能的,但是MAC地址能用吗? 验证与数据库中保存的值?以上是关于如何从 HTTP 请求中获取 MAC 地址?的主要内容,如果未能解决你的问题,请参考以下文章