C#獲取網卡MAC地址和CPU序列號

計算機上有一些唯一的標誌符,比如網卡MAC地址,CPU序列號,硬盤序列等。有時候爲了開發授權碼或者註冊碼,需要根據具體計算機進行授權,這是就需要獲取這些唯一標識信息了。

首先,是網卡MAC地址的獲取。網卡其實有很多種類,常見的有以太網卡(Ethernet),還有無線網卡(802.11),其他不常見的什麼令牌環網啊,名字很長很難懂的那些,就不在本文討論範圍之內了。另外,還有一種比較常見的,隧道類型的網卡,一般虛擬機(VMware)之類的網卡就是這種類型。那麼,怎麼獲取呢?有兩種方式,第一種,通過 NetWorkInterface 類進行獲取,能拿到很多信息,例如網卡類型,網卡描述,網卡名稱,當然,還有MAC地址;第二種,通過 ManagementObjectSearcher 類進行獲取,這個類後面還會用來獲取CPU序列號,很強大,幾乎所有設備資源都能夠獲取,但是比較容易出錯。先來看看第一種,通過 NetWorkInterface 類進行獲取:

//這裏使用 NetworkInterface 獲取網絡設備信息,能夠直接獲取網絡設備類型,描述,名稱等信息
NetworkInterface[] allNetWork = NetworkInterface.GetAllNetworkInterfaces();
if(allNetWork.Length > 0)
{
    foreach (var item in allNetWork)
    {
        //這裏只獲取以太網卡的mac地址
		if (item.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
		{
			//對MAC地址加上網卡名稱,方便進行對應和選擇
			string strInfo = item.GetPhysicalAddress().ToString() + $"({item.Name})";
		}
	}
else
{
	MessageBox.Show("找不到可用的網卡!");
}

這裏由於網卡可能會有多個,所以我給MAC地址加上網卡的名字,方便進行對應。

然後來看另外一種方式:

try
{
	ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM         
 Win32_NetworkAdapter WHERE ((MACAddress Is Not NULL) AND (Manufacturer <> 'Microsoft'))");
	
    string NetCardMACAddress = "";
	foreach (ManagementObject mo in searcher.Get())
	{
		NetCardMACAddress = mo["MACAddress"].ToString().Trim();
	}
}
catch
{
}

其實這種方式是通過WMI接口進行查詢,所以能夠獲取很多設備信息,但是由於要寫查詢語句,所以容易出錯。個人還是傾向於第一種。

 

然後再來看下CPU序列號的獲取方式。通過 ManagementClass 類進行獲取,這個類需要給項目添加引用 System.Management 纔可以使用。在使用結束後需要進行析構,然後會造成資源的浪費,以及影響下次的創建和使用。來看代碼:

ManagementClass mcCPU = new ManagementClass("Win32_Processor");
ManagementObjectCollection mocCPU = mcCPU.GetInstances();
if(mocCPU.Count == 1)
{
	foreach(var item in mocCPU)
	{
		var cpuId = item.Properties["ProcessorId"].Value.ToString();
	}
}
else
{
	string strInfo = "CPU個數爲:" + mocCPU.Count.ToString() + ",無法正常獲取!";
	MessageBox.Show(strInfo);
}
//使用完畢之後需要析構,避免資源的浪費
mcCPU.Dispose();
mocCPU.Dispose();

OK,到這裏就完成了 MAC地址和CPU序列號的獲取。代碼下載地址:https://download.csdn.net/download/kakaluote81/12254967

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章