C#获取 mac
源:http://blog.ywxyn.com/index.php/archives/617
C#获取机器的mac地址的时候,会用到Win32_NetworkAdapterConfiguration类,像如下代码:
/// <summary> |
/// 获取MAC地址 |
/// </summary> |
/// <returns></returns> |
public string GetNetCardMacAddress() |
{ |
ManagementClass mc; |
ManagementObjectCollection moc; |
mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); |
moc = mc.GetInstances(); |
string str = ""; |
foreach (ManagementObject mo in moc) |
{ |
if ((bool)mo["IPEnabled"] == true) |
{ |
str = mo["MacAddress"].ToString(); |
break; |
} |
} |
return str; |
} |
那么ManagementObject类除索引“IPEnabled”与“MacAddress”这两个之后还有哪些其它的属性呢?以下就是其它的属性:
class Win32_NetworkAdapterConfiguration : CIM_Setting |
{ |
boolean ArpAlwaysSourceRoute; |
boolean ArpUseEtherSNAP; |
string Caption; |
string DatabasePath; |
boolean DeadGWDetectEnabled; |
string DefaultIPGateway[]; |
uint8 DefaultTOS; |
uint8 DefaultTTL; |
string Description; |
boolean DHCPEnabled; |
datetime DHCPLeaseExpires; |
datetime DHCPLeaseObtained; |
string DHCPServer; |
string DNSDomain; |
string DNSDomainSuffixSearchOrder[]; |
boolean DNSEnabledForWINSResolution; |
string DNSHostName; |
string DNSServerSearchOrder[]; |
boolean DomainDNSRegistrationEnabled; |
uint32 ForwardBufferMemory; |
boolean FullDNSRegistrationEnabled; |
uint16 GatewayCostMetric[]; |
uint8 IGMPLevel; |
uint32 Index; |
uint32 InterfaceIndex; |
string IPAddress[]; |
uint32 IPConnectionMetric; |
boolean IPEnabled; |
boolean IPFilterSecurityEnabled; |
boolean IPPortSecurityEnabled; |
string IPSecPermitIPProtocols[]; |
string IPSecPermitTCPPorts[]; |
string IPSecPermitUDPPorts[]; |
string IPSubnet[]; |
boolean IPUseZeroBroadcast; |
string IPXAddress; |
boolean IPXEnabled; |
uint32 IPXFrameType[]; |
uint32 IPXMediaType; |
string IPXNetworkNumber[]; |
string IPXVirtualNetNumber; |
uint32 KeepAliveInterval; |
uint32 KeepAliveTime; |
string MACAddress; |
uint32 MTU; |
uint32 NumForwardPackets; |
boolean PMTUBHDetectEnabled; |
boolean PMTUDiscoveryEnabled; |
string ServiceName; |
string SettingID; |
uint32 TcpipNetbiosOptions; |
uint32 TcpMaxConnectRetransmissions; |
uint32 TcpMaxDataRetransmissions; |
uint32 TcpNumConnections; |
boolean TcpUseRFC1122UrgentPointer; |
uint16 TcpWindowSize; |
boolean WINSEnableLMHostsLookup; |
string WINSHostLookupFile; |
string WINSPrimaryServer; |
string WINSScopeID; |
string WINSSecondaryServer; |
}; |
详细见http://msdn.microsoft.com/en-us/library/aa394217(v=VS.85).aspx
有的时候,还会用到这样方法,当网卡有多个的时候,判断其中哪个开启了,然后获取启用的那个网卡的mac地址:
string mac = "网卡未配置"; |
ManagementClass mc; |
mc = new ManagementClass("Win32_NetworkAdapter"); |
ManagementObjectCollection moc = mc.GetInstances(); |
foreach (ManagementObject mo in moc) |
{ |
if (mo["NetConnectionStatus"]!=null&&mo["NetConnectionStatus"].ToString()=="2") |
{ |
mac = mo["MacAddress"].ToString(); |
mo.Dispose(); |
break; |
} |
} |
Win32_NetworkAdapter类中的其它属性如下:
class Win32_NetworkAdapter : CIM_NetworkAdapter |
{ |
string AdapterType; |
uint16 AdapterTypeID; |
boolean AutoSense; |
uint16 Availability; |
string Caption; |
uint32 ConfigManagerErrorCode; |
boolean ConfigManagerUserConfig; |
string CreationClassName; |
string Description; |
string DeviceID; |
boolean ErrorCleared; |
string ErrorDescription; |
string GUID; |
uint32 Index; |
datetime InstallDate; |
boolean Installed; |
uint32 InterfaceIndex; |
uint32 LastErrorCode; |
string MACAddress; |
string Manufacturer; |
uint32 MaxNumberControlled; |
uint64 MaxSpeed; |
string Name; |
string NetConnectionID; |
uint16 NetConnectionStatus; |
boolean NetEnabled; |
string NetworkAddresses[]; |
string PermanentAddress; |
boolean PhysicalAdapter; |
string PNPDeviceID; |
uint16 PowerManagementCapabilities[]; |
boolean PowerManagementSupported; |
string ProductName; |
string ServiceName; |
uint64 Speed; |
string Status; |
uint16 StatusInfo; |
string SystemCreationClassName; |
string SystemName; |
datetime TimeOfLastReset; |
}; |

浙公网安备 33010602011771号