在開發過程中需要獲取物理網卡的MAC地址:
python代碼如下:
import wmi c = wmi.WMI() for s in c.Win32_NetworkAdapter(): print(s.MACAddress)
在實際過程中,有時候會發現mac地址每次獲取會發生改變,
通過檢查發現,獲取mac地址時會把系統虛擬的網卡地址也會獲取到。我們通過powershell命令進行查看當前系統中擁有MAC地址的有那些設備:
PS C:\Users\xxx> get-wmiobject -class Win32_NetworkAdapterConfiguration -namespace "root\cimv2" | select ServiceName,ipadress,MacAddress ServiceName ipadress MacAddress ----------- -------- ---------- kdnic rt640x64 RtlWlanu 50:2B:73:D8:1A:C9 vwifimp 52:2B:73:D8:1A:C9 RasSstp RasAgileVpn Rasl2tp PptpMiniport RasPppoe NdisWan F2:BB:20:52:41:53 NdisWan 0A:93:20:52:41:53 NdisWan 16:86:20:52:41:53 vwifimp 50:2B:73:D8:1A:C9 VMnetAdapter 00:50:56:C0:00:01 VMnetAdapter 00:50:56:C0:00:08
看結果中的NdisWan,如果獲取到的是它,那機器每次重啟都有可能發生改變。
所以需要把代碼做一下調整:
import wmi c = wmi.WMI() for s in c.Win32_NetworkAdapter(): if(s.MACAddress != None and s.PhysicalAdapter): print(s.MACAddress)
過濾掉沒有mac地址的設備和非物理網絡設備。如果有虛擬機,可以把虛擬機的虛擬網卡也過濾掉。