通过 Silverlight 4 获取 MAC 地址

Posted

技术标签:

【中文标题】通过 Silverlight 4 获取 MAC 地址【英文标题】:get MAC address through Silverlight 4 【发布时间】:2011-07-07 14:39:09 【问题描述】:

我试过这样做- http://thewayithink.co.uk/post/2010/05/04/Mac-Address-in-Silverlight-4.aspx

但是这3个条件总是假的:

if ((Application.Current.IsRunningOutOfBrowser) && 

(Application.Current.HasElevatedPermissions) && 
(AutomationFactory.IsAvailable))

我猜是因为权限和安全问题.. 有什么办法可以从客户端获取物理IP地址? 正如我所说,我使用 Silverlight 4。

【问题讨论】:

【参考方案1】:

使用这个来自this link的代码示例(这个问题也提到了 here)。

public partial class MyClient : UserControl

    public MyClient()
    
        MACAddressManager macAddressManager = new MACAddressManager();
        macAddressManager.OnGetMACAddressCompleted += new EventHandler(macAddressManager_OnGetMACAddressCompleted);
        macAddressManager.BeginGetMACAddress();
    

    void macAddressManager_OnGetMACAddressCompleted(object sender, EventArgs e)
    
        MACAddressManager manager = (MACAddressManager) sender;
        // MAC Address  value is in manager.MACAddress
    
  

  public class MACAddressManager
  
    private dynamic sWbemServices;
    private dynamic sWbemSink;

    public string MACAddress  get; private set; 
    public event EventHandler OnGetMACAddressCompleted;

    private void EndGetMACAddress(object sender, EventArgs e)
    
        dynamic objWbemObject = sender;
        MACAddress = objWbemObject.MACAddress;
        if (OnGetMACAddressCompleted != null)
            OnGetMACAddressCompleted(this, EventArgs.Empty);
    

    public void BeginGetMACAddress()
    
        if ((Application.Current.IsRunningOutOfBrowser) && (Application.Current.HasElevatedPermissions) && (AutomationFactory.IsAvailable))
        
            dynamic sWbemLocator = AutomationFactory.CreateObject("WbemScripting.SWBemLocator");
            sWbemServices = sWbemLocator.ConnectServer(".");
            sWbemServices.Security_.ImpersonationLevel = 3; //impersonate

            sWbemSink = AutomationFactory.CreateObject("WbemScripting.SWbemSink");
            sWbemSink.OnObjectReady += new EventHandler(EndGetMACAddress);

            string query = "SELECT * FROM Win32_NetworkAdapterConfiguration where IPEnabled=true";
            sWbemServices.ExecQueryAsync(sWbemSink, query);
        
    

【讨论】:

【参考方案2】:

Silverlight 的安全模型使您无法从浏览器沙箱之外的客户端计算机访问任何内容,并且分配给隔离存储的(少量)磁盘空间。客户端机器的 MAC 地址属于该类别。但是,您可以使用提升的权限运行您的应用程序“Out of Browser”(OOB),这就是该测试正在检查的内容。

第一个条件表明您必须用尽浏览器 - 所以第一个问题是“您的应用程序是否已启用 OOB 并用尽了浏览器?”。

如果不是,那么测试将失败。

然后,如果应用程序正在运行 OOB,它还必须以提升的权限运行。是这样吗?

至于 AutomationFactory 测试 - this post 上的答案暗示当应用程序用完具有提升权限的浏览器时它会是真的。

【讨论】:

以上是关于通过 Silverlight 4 获取 MAC 地址的主要内容,如果未能解决你的问题,请参考以下文章

silverlight是干嘛用的?

Microsoft Silverlight是啥程序?

分析 Silverlight 4

Silverlight 4 - 锦标赛风格视图(淘汰赛,树)

Silverlight 4 - 将 UIElement 渲染为图像

Silverlight 4.0 - 通过自定义安装程序部署 XAP 并将其配置为 OOB + 提升权限