1

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

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

4

4 回答 4

6

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

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

于 2009-08-31T11:17:04.263 回答
3

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

于 2009-08-31T11:22:01.710 回答
1

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

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

于 2009-08-31T11:47:23.640 回答
1

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

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

于 2009-08-31T11:20:36.003 回答