2012-03-03 145 views
3

我想使用c#访问计算机的mac地址。我已经使用下面的代码来访问mac地址,但是在这个代码中存在一些问题。获取计算机的MAC地址

代码1

foreach(NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) 
{ 
    if(nic.OperationalStatus == OperationalStatus.Up) 
    { 
     Console.WriteLine(nic.GetPhysicalAddress().ToString()); 
     checkMAC = nic.GetPhysicalAddress().ToString(); 
     break; 
    } 
} 

代码2

ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); 
    ManagementObjectCollection moc = mc.GetInstances(); 
    string MACAddress = String.Empty; 
    foreach (ManagementObject mo in moc) 
    { 
     if (MACAddress == String.Empty) // only return MAC Address from first card 
     { 
      if ((bool)mo["IPEnabled"] == true) MACAddress = mo["MacAddress"].ToString(); 
     } 
     mo.Dispose(); 
    } 

    MACAddress = MACAddress.Replace(":", ""); 

在当我们从网络连接断开,那么它将返回null MAC地址第一个代码。第二个代码在网络适配器连接ID断开连接时返回MAC地址但是,当我们将网络连接分开或删除计算机的IP地址时,它将返回空MAC地址。

如何获取禁用网络连接时的MAC地址,没有IP地址分配给PC或网络连接断开连接?

回答

4

当您禁用网络适配器时,根本无法访问它 - 就好像它没有安装,这就是您没有看到MAC地址的原因。

编辑:说明:

MAC地址属于网络适配器。如果您有3个适配器,则您有3个MAC地址。如果您没有适配器,则没有MAC地址。

+0

mac地址是我们自己的计算机地址那么网络适配器和mac地址的连接是什么 – user847455 2012-03-03 08:46:44

+0

我加了一个解释。 – zmbq 2012-03-03 09:48:49

+0

正确。这就是禁用界面意味着,应用程序将无法再看到它。 [文档](http://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkinterface.getallnetworkinterfaces.aspx)清楚地说明了这一点。总之,这个问题所要求的是不可能的。 – 2012-03-03 10:00:12

相关问题