C#獲取電腦網(wǎng)卡MAC地址的方法詳解
本文將詳細介紹在C#中如何獲取電腦MAC地址的方法,包含完整代碼示例和實際開發(fā)中的注意事項。
一、什么是MAC地址
MAC地址(Media Access Control Address)是網(wǎng)絡接口的物理地址,由48位二進制數(shù)組成,通常表示為6組十六進制數(shù)(如 00:1A:2B:3C:4D:5E)。每個網(wǎng)卡出廠時都被分配了全球唯一的MAC地址,常用于設備識別、網(wǎng)絡管理和安全認證等場景。
二、推薦方案:使用 NetworkInterface 類
.NET Framework 提供了 System.Net.NetworkInformation 命名空間,這是獲取MAC地址最標準、跨平臺兼容性最好的方式
2.1 獲取電腦可用網(wǎng)卡MAC地址
/// <summary>
/// 獲取電腦MAC地址
/// </summary>
/// <returns></returns>
public static List<string> GetMacByWmi()
{
string key = "SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\";
List<string> macList = new List<string>();
try
{
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface adapter in nics)
{
if (adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet && adapter.GetPhysicalAddress().ToString().Length != 0)
{
string fRegistryKey = key + adapter.Id + "\\Connection";
RegistryKey rk = Registry.LocalMachine.OpenSubKey(fRegistryKey, false);
if (rk != null)
{
//string fPnpInstanceID = rk.GetValue("PnpInstanceID", "").ToString();
//if (fPnpInstanceID.Length > 3 && fPnpInstanceID.Substring(0, 3) == "PCI")
{
string macAddress = adapter.GetPhysicalAddress().ToString();
for (int i = 1; i < 6; i++)
{
macAddress = macAddress.Insert(3 * i - 1, "-");
}
macList.Add(macAddress);
//break;
}
}
}
}
}
catch (Exception ex)
{
}
return macList;
}
2.2 調(diào)試結(jié)果

2.3 常見網(wǎng)卡類型枚舉
| 類型 | 說明 |
|---|---|
Ethernet | 有線以太網(wǎng) |
Wireless80211 | WiFi無線網(wǎng)卡 |
Loopback | 本地回環(huán)接口 |
Tunnel | 虛擬隧道接口 |
三、常見問題與注意事項
3.1 虛擬網(wǎng)卡過濾
現(xiàn)代電腦常有多個虛擬網(wǎng)卡(VMware、VirtualBox、VPN等),建議過濾掉這些以獲取真實物理網(wǎng)卡
// 排除虛擬網(wǎng)卡的關鍵字
string[] virtualKeywords = {
"virtual", "vmware", "hyper-v", "virtualbox",
"vpn", "tunnel", "tap-windows", "wireguard"
};
3.2 MAC地址格式轉(zhuǎn)換
// 原始格式: 001A2B3C4D5E
string raw = "001A2B3C4D5E";
// 轉(zhuǎn)換為冒號格式: 00:1A:2B:3C:4D:5E
string colon = string.Join(":", Enumerable.Range(0, 6)
.Select(i => raw.Substring(i * 2, 2)));
// 轉(zhuǎn)換為連字符格式: 00-1A-2B-3C-4D-5E
string hyphen = string.Join("-", Enumerable.Range(0, 6)
.Select(i => raw.Substring(i * 2, 2)));
3.3 權限問題
在普通用戶權限下通??梢哉+@取MAC地址
某些企業(yè)環(huán)境或安全軟件可能限制訪問,建議添加異常處理
3.4 多網(wǎng)卡環(huán)境
筆記本電腦通常同時具有有線和無線網(wǎng)卡,建議:
- 優(yōu)先選擇 OperationalStatus.Up 的網(wǎng)卡
- 按連接速度排序,選擇最快的網(wǎng)卡
- 排除Loopback和虛擬網(wǎng)卡
四、總結(jié)
在大多數(shù)場景下,推薦使用 NetworkInterface 類獲取MAC地址,它簡單、可靠且跨平臺兼容。
到此這篇關于C#獲取電腦網(wǎng)卡MAC地址的方法詳解的文章就介紹到這了,更多相關C#獲取電腦網(wǎng)卡MAC地址內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
通過C#獲取Excel單元格的數(shù)據(jù)類型的方法詳解
在處理 Excel 文件時,了解單元格的數(shù)據(jù)類型有助于我們正確地解析和處理數(shù)據(jù),本文將詳細介紹如何使用 Free Spire.XLS 來獲取 Excel 單元格的數(shù)據(jù)類型,幫助開發(fā)者精準地識別數(shù)據(jù)類型,確保數(shù)據(jù)處理的準確性,需要的朋友可以參考下2025-05-05
使用C#和SQL Server實現(xiàn)自動清理功能的完整方案
在現(xiàn)代軟件開發(fā)中,數(shù)據(jù)管理是一個至關重要的環(huán)節(jié),隨著時間的推移,數(shù)據(jù)庫中會積累大量過期或冗余的數(shù)據(jù),這些數(shù)據(jù)不僅占用存儲空間,還會影響系統(tǒng)性能,本文將詳細介紹如何使用C#和SQL Server構(gòu)建一個功能完善的自動清理系統(tǒng),需要的朋友可以參考下2026-01-01

