【问题标题】:How to get the MAC address of the visitors' PC in an ASP.NET webApp?如何在 ASP.NET webApp 中获取访问者 PC 的 MAC 地址?
【发布时间】:2009-08-31 11:14:26
【问题描述】:

在 ASP.NET (C#) WebApp 中,我可以轻松获取访问者 PC 的 IP,但是如何在 ASP.NET WebApp 中获取访问者 PC 的 MAC 地址?

而且这个 ASP.NET 应用运行在我们公司的内网,访问者也在我们公司的同一个内网。

【问题讨论】:

  • 即使在同一个 Intranet 上也不能保证您可以访问 MAC。您需要位于同一网段(?我不完全确定术语),这意味着您的服务器和客户端之间没有路由器。除非您使用的是小型(或设置不佳)网络,否则情况可能并非如此。
  • 更不用说 mac 地址可以被欺骗,与 IP 地址一样,也不应该用于任何形式的安全。
  • 是的,Web服务器和客户端PC使用同一个路由器,在我们公司的同一个网络中。
  • 他们使用同一个路由器? IE。路由器在它们和服务器之间?那么,就基于服务器的解决方案而言,你真的很不走运。
  • 我的意思是我们公司的服务器PC和客户端PC使用同一个网络设备访问外部互联网。

标签: asp.net mac-address


【解决方案1】:

MAC 地址不是IP header(或任何其他高于此的协议)的一部分,因此如果您看到的只是 HTTP 流量,则该地址不可用。

编辑(在 OP 更新后):由于客户端和服务器位于同一内部网络上,从 IP 地址而不是 MAC 地址获取主机名不是更好吗?您可以根据 IP 地址轻松查找主机名。

【讨论】:

  • 更具体地说,MAC 地址在您和他们之间的第一个路由器之外没有用(就网络通信而言)。
  • @ -1:因为它可用的,说它不是 IP 标头的一部分有点无关紧要——因为这不是物理寻址的所在。这就像说 CPU 寄存器中的内容不是 Windows API 的一部分,因此它不可用....
  • @Mark Brackett:在更新之前,OP 唯一声明的是这是一个 Web 应用程序。 IE。唯一可用的信息是您可以从 TCP/IP 堆栈中的 IP 及更高版本获得的信息,因此 MAC 地址在常规 Web 场景中不可用。如果您有其他说明的信息,请附上链接。
  • @Brian - 我确实包含了一个指向 GetIpNetTable 的链接,它为您提供了 ARP 表。人们似乎更喜欢你的回答。 ;)
  • @Mark:我非常清楚 MAC 地址绝不是 IP 标头的一部分(我链接到规范,尽管 wiki 不是 RFC)。我的观点是,由于这是最低级别的协议,因此可以保证 Web 应用程序可以看到 MAC 对 Web 应用程序不可用是显而易见的。因此,MAC 永远不会成为 Web 服务器和客户端之间的流量的一部分。我承认这样一个事实,服务器可能能够从任何本地客户端的 IP 地址中检索 MAC 地址,但我看不出这如何以任何方式使我的观点无效。
【解决方案2】:

立即想到的答案是,这只有在您编写一个在客户端浏览器中运行的 ActiveX 控件以代表您获取此信息时才有可能。另一方面,如果 javascript 可以实例化一个将获取信息的 COM 对象,则客户端上的 JavaScript 可能是可能的。我能想到的唯一另一种方法是让 Windows 服务在 IP 被捕获后执行 ARP 请求。

【讨论】:

    【解决方案3】:

    你不能轻易做到这一点。 协议(例如 ARP)允许在 MAC 和 IP 地址之间进行转换,但此流量通常位于防火墙后面,因此您无法在公共网站上使用。

    在 Intranet 上,您可以做一些事情,但不能通过 ASP.NET。您将需要使用其他机制来捕获此信息 - 但这些工具(例如数据包嗅探器)通常对开发人员不可用,并且可能违反公司 IS 政策。

    【讨论】:

      【解决方案4】:

      由于你在同一个子网上,你可以P/InvokeGetIpNetTable获取网络服务器的ARP表。如果您实时执行此操作,则不需要额外的工作 - 因为您正在与客户端进行对话,您将获得 ARP 信息。否则,您需要构建一个 ARP 请求或一些 IP 流量(例如,ping)才能将其放入缓存中 - 请注意,由于 DHCP 和其他网络变幻莫测(如机器被关闭),它稍后将 IP 转换为 MAC 可能会产生不同的答案。

      还请注意,任何外部客户端(即跨路由器的客户端)都不会出现在table 中 - 所以也要准备好处理它。如果您出于某种原因需要 MAC,从技术上讲,它是您路由器的 MAC。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-08
        • 2011-06-09
        • 2018-11-17
        • 1970-01-01
        • 2015-04-11
        • 2020-12-12
        相关资源
        最近更新 更多