получить MAC-адрес через Silverlight 4 - PullRequest
3 голосов
/ 03 марта 2011

я пытался сделать это- 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.

Ответы [ 2 ]

3 голосов
/ 03 марта 2011

Модель безопасности Silverlight такова, что вы ничего не можете получить с клиентского компьютера вне изолированной программной среды браузера и (небольшого) объема дискового пространства, выделенного для изолированного хранилища. MAC-адрес клиентского компьютера попадает в эту категорию. Однако вы можете запустить ваше приложение «Out of Browser» (OOB) с повышенными привилегиями, что и проверяет этот тест.

Первое условие гласит, что у вас не работает браузер, поэтому первый вопрос - «Включено ли в OOB вашего приложения и заканчивается ли оно?».

Если нет, то тест не пройден.

Тогда, если приложение работает OOB, оно также должно работать с повышенными разрешениями. Это тот случай?

Что касается теста AutomationFactory - ответ на в этом посте подразумевает, что это будет так, если в приложении не работает браузер с повышенными разрешениями.

0 голосов
/ 23 апреля 2018

используйте этот пример кода от этой ссылки (здесь также упоминается вопрос ).

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);
        }
    }
}
...