【问题标题】:How can I get a MAC address from an HTTP request?如何从 HTTP 请求中获取 MAC 地址?
【发布时间】:2011-03-19 13:22:10
【问题描述】:

谁能给我一些关于从 HTTP 请求中获取用户 MAC 地址的指示?

用户将来自我的网络外部

【问题讨论】:

标签: asp.net mac-address


【解决方案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地址能用吗?
  • 验证与数据库中保存的值?
猜你喜欢
  • 1970-01-01
  • 2014-04-24
  • 2020-12-28
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多