Web服务器以获取客户端的计算机mac地址

时间:2009-05-20 16:19:15

标签: c# asp.net iis

我正在尝试为在线构建的C#winform应用程序构建一些复杂的东西,并试图在这里和那里收集一些信息。我在网上看到有可能获得一台计算机的mac地址。网络使用System.Net.NetworkInformation或System.Management.ManagementClass(由于某些原因我无法引用)。我担心的是什么

  1. 我的网络服务器能否在线知道连接到它的客户机器的mac地址?
  2. 如果问题1为真,我猜它会使用IP(如果我错了,请纠正我)如果客户端的机器位于代理服务器后面或使用多个Web代理怎么办?
  3. 如果问题1和2为肯定如何从Web服务器执行此操作。

3 个答案:

答案 0 :(得分:5)

不,没有简单的方法可以做到这一点。

MAC地址只能在同一个子网上解析 - 假设这不是一个相当小的Intranet应用程序,您将不会与客户端位于同一子网上。

理论上,使用远程WMI查询客户端会起作用 - 但防火墙和权限问题并非易事。再说一遍,除非你能控制所有客户 - 你不可能在这里取得成功。

关于您唯一可以做的是可下载的应用程序 - 可能是Flash,Silverlight或ActiveX - 为您查询本地计算机。我不确定这些信息是否会被浏览器沙箱化。

我的猜测是,您可以更轻松地执行您要执行的操作 - 但您需要提供有关为什么您想要MAC地址的更多详细信息。

答案 1 :(得分:0)

正如其他回复所示,获取IP地址可能无法满足您的需求。你想用这些信息做什么?

您可能想尝试使用System.Management.ManagementObjectSearcher对象来查询此类信息。我知道这可以用来获取每个连接的网络适配器的MAC地址。这个逻辑必须在客户端,然后可以将您需要的任何信息传递给服务器。

看起来this Google Groups post可能就是你所追求的。 这是有趣的一点:

using System.Management;

ObjectQuery query = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration"); 
ManagementObjectCollection queryCollection = query.Get();
foreach( ManagementObject mo in queryCollection )
{
     foreach(string s in addresses)
     { 
            Console.WriteLine( "IP Address ‘{0}’", s); 
     }
     foreach(string s in subnets)
     { 
            Console.WriteLine( "IP Subnet ‘{0}’", s); 
     }
}

答案 2 :(得分:0)

您无法从网络服务器获取任何信息,也不应该尝试。考虑到机器可能有多个IP地址和多个MAC地址,可能位于代理服务器或网络地址转换设备后面,或者更糟。

IP地址属于网络层,通常不应由Application层使用。如果不出意外,网络管理员不太可能在对网络进行更改时咨询开发人员,这将使您的假设无效。