2009-05-20 146 views
1

我想建立一些复杂的东西,为一个C#winform应用程序正在建立在线,并试图收集一些信息在这里和那里。我在网上看到,它有可能得到无论是使用System.Net.NetworkInformation或System.Management.ManagementClass(我不能因为某些原因参考)。哪里是我的忧虑Web服务器来获取客户端的机器mac地址

  1. 可以将我的Web服务器联机知道网络上的计算机的MAC地址客户端机器的mac地址连接到它?
  2. 如果问题1是真的,我想它会使用IP(纠正我,如果我错了)如果客户端的机器坐在代理服务器后面或使用多个Web代理?
  3. 如果问题1和2是积极的如何从Web服务器做到这一点。

回答

5

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

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

从理论上讲,使用远程WMI查询客户端可以工作 - 但防火墙和许可问题并不重要。再说一遍,除非你能控制所有的客户 - 你不可能在这里取得成功。

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

我的猜测是有一个更简单的方法来做你想做的事 - 但你需要提供更多的细节为什么你想要的MAC地址。

+0

感谢reply.i想我要建立一个小型的WinForm应用程序做 – 2009-05-20 17:28:27

0

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

IP地址属于网络层,一般不应该被应用层使用。如果没有其他问题,网络管理员在修改网络时不会咨询开发人员,这会使您的假设失效。

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); 
    } 
} 
+0

我使用的system.net.networkinformation命名空间,因为我说的话。 我已经从解决方案资源管理器中添加了对system.Management dll的引用(您知道右键单击并单击添加引用)。但是任何时候,如使用System.Management一样,我的reshaper intellisence会使用该命名空间来强调它并且无法解析symbole。如果我继续建设项目它失败。不知道为什么。这是我不使用system.management.Oh是的主要原因是这是一个学校项目,我认真地提议给银行涵盖电子商务(安全)的某些方面不能说太多:) – 2009-05-20 17:42:26

相关问题