取得系統中網絡卡MAC位址方法一

2021-03-31 08:56:32 字數 1416 閱讀 1274

第一種方法使用microsoft的***bios api。 這是一套通過winsock提供底層網路支援的命令。使用***bios的最大缺點是您必須在系統中安裝了***bios服務(如果您在windows網路中啟用了檔案共享的話,這就不是問題了)。除此此外,這種方法又快又準確。

***bios api只包括了乙個函式,就叫做***bios。這個函式使用網路控制塊(***work control block)結構作為引數,這個結構告訴函式要做什麼。結構的定義如下:

typedef struct _ncb ncb, *pncb;

重點在於ncb_***mand 成員。這個成員告訴***bios該作什麼。我們使用三個命令來探測mac位址。他們在msdn的定義如下:

命令描述:

ncbenum windows nt/2000: 列舉系統中網絡卡的數量。使用此命令後,ncb_buffer成員指向由lana_enum結構填充的緩衝區。

ncbenum 不是標準的 ***bios 3.0 命令。

ncbreset 重置網絡卡。網絡卡在接受新的ncb命令之前必須重置。

ncbastat 接受本地或遠端介面卡的狀態。使用此命令後,ncb_buffer成員指向由adapter_status結構填充的緩衝區,隨後是name_buffer結構的陣列。

下面就是例項源程式。

***bios.cpp

#include

#include

#include

#include

#include

using namespace std;

#define bzero(thing,sz) memset(thing,0,sz)

bool getadapterinfo(int adapter_num, string &mac_addr)

// 準備取得介面卡的狀態塊

bzero(&ncb,sizeof(ncb);

ncb.ncb_***mand = ncbastat;

ncb.ncb_lana_num = adapter_num;

strcpy((char *) ncb.ncb_callname, "*");

struct astat

adapter;

bzero(&adapter,sizeof(adapter));

ncb.ncb_buffer = (unsigned char *)&adapter;

ncb.ncb_length = sizeof(adapter);

// 取得網絡卡的資訊,並且如果網絡卡正常工作的話,返回標準的冒號分隔格式。

if (***bios(&ncb) == 0)

else }

int main()

else }

return 0;

}

Delphi取得網絡卡MAC位址

uses nb30 一定要加入 function getphysicaladdress string varncb tncb adapter tadapterstatus lanaenum tlanaenum intidx integer re char buf string begin tryze...

詳解Linux系統中網絡卡MAC位址轉殖方法

怎麼臨時性地改變 mac 位址?你可以在 linux 執行的時候改變 mac 位址。需要注意的是當 程式設計客棧mac 位址轉換的那一會時間,你的網路會掉線。當電腦重啟時 mac 位址又會變回原來的。下面介紹幾種方法來改變你的 mac 位址。方法一 iproute2 sudo ip link set...

Intel 網絡卡修改mac位址方法

我的網絡卡是 intel r centrino r wireless n 2230 想要修改mac位址,但是進入網絡卡配置後點高階,沒有看見network address或者類似的選項。只有乙個叫做 沒有描述 的選項可以更改,寫上新mac重啟後無效,照網上教程和軟體修改登錄檔也無效。怎麼辦呢?謝謝大...