第一種方法:使用NetBIOS
包含頭文件:nb30.h
支持庫:Netapi32.lib
該方法只使用一個函數:Netbios(PNCB pncb),但是使用過程有點複雜,第二種方法比較簡單
需要用到3個結構:NCB,LANA_ENUM,ADAPTER_STATUS
(只寫上核心部分,其實如果只想要物理網卡的MAC地址,直接調用第3步就行了,這裏可以列出多個MAC地址,除物理的外都是虛擬的)
1、用NCBENUM命令枚舉系統中網卡的數量
NCB ncb;
LANA_ENUM lana_enum;
ADAPTER_STATUS adapter;
memset(&ncb,0,sizeof(ncb));
ncb.ncb_command = NCBENUM;
ncb.ncb_buffer = (unsigned char*)&lana_enum;
ncb.ncb_length = sizeof(lana_enum);
Netbios(&ncb); 成功則返回0,網卡數量在lana_enum.length
2、用NCBRESET重置網卡,網卡接受新的NCB命令時必須重置
memset(&ncb,0,sizeof(ncb));
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = lana_enum.lana; lana_enum是第一步獲取
Netbios(&ncb);
3、用NCBASTAT接受本地或遠程接口卡的狀態
memset(&ncb,0,sizeof(ncb));
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = lana_enum.lana; 同樣爲第一步獲取的
strcpy((char*)ncb.ncb_callname,"* "); 該參數書上說是被呼叫應用的名字,還沒搞懂啥意思
ncb.ncb_buffer = (unsigned char*)&adapter;
ncb.ncb_length = sizeof(adapter);
Netbios(&ncb);
MAC網卡地址:adapter.adapter_address
第二種方法:使用GetAdapterInfo
查詢SDK有範例