如何在ASP.NET webApp中获取访问者PC的MAC地址?

时间:2009-08-31 11:14:27

标签: asp.net mac-address

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

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

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

在Intranet上,您可以执行某些操作,但不能通过ASP.NET执行某些操作。您需要使用其他机制来捕获此信息 - 但开发人员通常无法使用这些类型的工具(例如数据包嗅探器),并且可能违反公司的IS策略。

答案 3 :(得分:1)

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

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