2012-07-27 18 views
1

我有要求在我的Metro UI应用程序中获取网络接口的MAC地址。据我所知,这在.NET 4.5 for Metro应用程序API中不受支持。我错了吗?可能在.NET Metro应用程序中获取网络MAC地址?

+0

的目的是什么,你所需要的MAC地址?也许有问题的替代解决方案。 – 2012-09-16 23:44:47

+0

这是一个“好的”持久计算机标识符。是的,人们可以欺骗MAC地址,但很少有同一本地网络中的两个系统具有完全相同的MAC地址,这是我们所需要的。 – Jippers 2012-09-17 20:24:49

回答

0

您正在访问的低级别的网络从一个Metro风格的应用程序信息的限制,因此,这是不可能与股票SDK。这是设计。

+0

悲伤的脸:(但我想要的MAC地址 – Jippers 2012-07-30 17:55:47

-3
private void getDeviceInfos() 
    { 
     Profiles = Windows.Networking.Connectivity.NetworkInformation.GetConnectionProfiles(); 
     Adapter = Profiles[0].NetworkAdapter; 

     Guid AdapterId = Adapter.NetworkAdapterId; 
    } 
    IReadOnlyList<Windows.Networking.Connectivity.ConnectionProfile> Profiles; 
    Windows.Networking.Connectivity.NetworkAdapter Adapter; 
+0

这有助于获得MAC地址? – 2012-09-16 23:44:27

+2

编号给出一个GUID。 – Jippers 2012-09-17 20:25:14

5

您不能检索MAC地址每说,但您可以检索硬件特定的信息来识别机器。

下面是一个完整的MSDN文章讨论的主题:Guidance on using the App Specific Hardware ID (ASHWID) to implement per-device app logic (Windows)

小心使用你需要的信息,而不是完整的ID,因为它可能修改是对你没用(如码头信息例如站字节)。

下面是基于几个字节(CPU ID,内存大小,磁盘设备和BIOS的序列号)一个计算设备ID的代码示例:

string deviceSerial = string.Empty; 
// http://msdn.microsoft.com/en-us/library/windows/apps/jj553431 
Windows.System.Profile.HardwareToken hardwareToken = Windows.System.Profile.HardwareIdentification.GetPackageSpecificToken(null); 
using (DataReader dataReader = DataReader.FromBuffer(hardwareToken.Id)) 
{ 
    int offset = 0; 
    while (offset < hardwareToken.Id.Length) 
    { 
     byte[] hardwareEntry = new byte[4]; 
     dataReader.ReadBytes(hardwareEntry); 

     // CPU ID of the processor || Size of the memory || Serial number of the disk device || BIOS 
     if ((hardwareEntry[0] == 1 || hardwareEntry[0] == 2 || hardwareEntry[0] == 3 || hardwareEntry[0] == 9) && hardwareEntry[1] == 0) 
     { 
      if (!string.IsNullOrEmpty(deviceSerial)) 
      { 
       deviceSerial += "|"; 
      } 
      deviceSerial += string.Format("{0}.{1}", hardwareEntry[2], hardwareEntry[3]); 
     } 
     offset += 4; 
    } 
} 

Debug.WriteLine("deviceSerial=" + deviceSerial); 
相关问题