程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 取得系統中網卡MAC地址的三種方法

取得系統中網卡MAC地址的三種方法

編輯:vc教程

做好的程序員一如做人。多看多想或許他山之石可以攻玉,但永遠不要成為代碼的奴隸。 CKER

原著:Borland

Translated by CKER

第一種方法使用Microsoft的Netbios API。 這是一套通過Winsock提供底層網絡支持的命令。使用Netbios的最大缺點是您必須在系統中安裝了Netbios服務(如果您在windows網絡中啟用了文件共享的話,這就不是問題了)。除此此外,這種方法又快又准確。

Netbios API只包括了一個函數,就叫做Netbios。這個函數使用網絡控制塊(network control block)結構作為參數,這個結構告訴函數要做什麼。結構的定義如下:

typedef struct _NCB {
   UCHAR ncb_command;
   UCHAR ncb_retcode;
   UCHAR ncb_lsn;
   UCHAR ncb_num;
   PUCHAR ncb_buffer;
   WORD  ncb_length;
   UCHAR ncb_callname[NCBNAMSZ];
   UCHAR ncb_name[NCBNAMSZ];
   UCHAR ncb_rto;
   UCHAR ncb_sto;
   void (CALLBACK *ncb_post) (struct _NCB *);
   UCHAR ncb_lana_num;
   UCHAR ncb_cmd_cplt;
#ifdef _WIN64
   UCHAR ncb_reserve[18];
#else
   UCHAR ncb_reserve[10];
#endif
   HANDLE ncb_event;
} NCB, *PNCB;

重點在於ncb_command 成員。這個成員告訴Netbios該作什麼。我們使用三個命令來探測MAC地址。他們在MSDN的定義如下:

命令描述:

NCBENUM Windows NT/2000: 列舉系統中網卡的數量。使用此命令後,ncb_buffer成員指向由LANA_ENUM結構填充的緩沖區。

NCBENUM 不是標准的 NetBIOS 3.0 命令。

NCBRESET 重置網卡。網卡在接受新的NCB命令之前必須重置。

NCBASTAT 接受本地或遠程接口卡的狀態。使用此命令後,ncb_buffer成員指向由ADAPTER_STATUS結構填充的緩沖區,隨後是NAME_BUFFER結構的數組。

下面就是取得您系統MAC地址的步驟:

1》列舉所有的接口卡。

2》重置每塊卡以取得它的正確信息。

3》查詢接口卡,取得MAC地址並生成標准的冒號分隔格式。

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved