vc++如何獲取本機所有mac地址 匿名使用者 1級 2018-11-20 回答

下面的程式碼是透過ARP來得到的。ip地址可以是本機某網絡卡的地址,也可以是其它計算機的地址,得到的MAC地址就是IP所對應的網絡卡MAC地址

#include

#include

#include

// for ARP

#pragma comment ( lib, “Iphlpapi。lib” )

#pragma comment (lib, “Ws2_32。lib”)

void main(void)

{

WSADATA wsd;

if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)

{

return ;

}

struct in_addr sa;

sa。S_un。S_addr = inet_addr(“192。168。0。6”);

DWORD dwMacAddLen = 6;

BYTE pbyMacAddress[6];

int i;

for (i = 0; i

評論

0

0

載入更多

vc++如何獲取本機所有mac地址 匿名使用者 1級 2018-11-20 回答

透過ARP協議可以得到,

也可以透過查詢登錄檔的方式得到(沒有測試)

下面的程式碼是透過ARP來得到的。ip地址可以是本機某網絡卡的地址,也可以是其它計算機的地址,得到的MAC地址就是IP所對應的網絡卡MAC地址

#include

#include

#include

// for ARP

#pragma comment ( lib, “Iphlpapi。lib” )

#pragma comment (lib, “Ws2_32。lib”)

void main(void)

{

WSADATA wsd;

if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)

{

return ;

}

struct in_addr sa;

sa。S_un。S_addr = inet_addr(“192。168。0。6”);

DWORD dwMacAddLen = 6;

BYTE pbyMacAddress[6];

int i;

for (i = 0; i

評論

0

0

載入更多

vc++如何獲取本機所有mac地址 匿名使用者 1級 2018-11-20 回答

以下是參考程式碼:

// 標頭檔案包含

#include “stdafx。h”

#include

#include

#include

using namespace std;

// 函式宣告

void output(PIP_ADAPTER_INFO pIpAdapterInfo);

// 程式入口

int _tmain(int argc, _TCHAR* argv[])

{

//PIP_ADAPTER_INFO結構體指標儲存本機網絡卡資訊

PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();

//得到結構體大小,用於GetAdaptersInfo引數

unsigned long stSize = sizeof(IP_ADAPTER_INFO);

//呼叫GetAdaptersInfo函式,填充pIpAdapterInfo指標變數;其中stSize引數既是一個輸入量也是一個輸出量

int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);

if (ERROR_BUFFER_OVERFLOW==nRel)

{

//如果函式返回的是ERROR_BUFFER_OVERFLOW

//則說明GetAdaptersInfo引數傳遞的記憶體空間不夠,同時其傳出stSize,表示需要的空間大小

//這也是說明為什麼stSize既是一個輸入量也是一個輸出量

//釋放原來的記憶體空間

delete pIpAdapterInfo;

//重新申請記憶體空間用來儲存所有網絡卡資訊

pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];

//再次呼叫GetAdaptersInfo函式,填充pIpAdapterInfo指標變數

nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);

}

if (ERROR_SUCCESS==nRel)

{

//輸出網絡卡資訊

output(pIpAdapterInfo);

}

//釋放記憶體空間

if (pIpAdapterInfo)

{

delete pIpAdapterInfo;

}

getchar();

return 0;

}

///函式作用,輸出網絡卡資訊

void output(PIP_ADAPTER_INFO pIpAdapterInfo)

{

//可能有多網絡卡,因此透過迴圈去判斷

while (pIpAdapterInfo)

{

cout

Description<

Address;

for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)

if (i==pIpAdapterInfo->AddressLength-1)

{

printf(“%02x\n”, pIpAdapterInfo->Address[i]);

}

else

{

printf(“%02x-”, pIpAdapterInfo->Address[i]);

}

cout

do

{

cout<

IpAddress。String<

Next;

} while (pIpAddrString);

pIpAdapterInfo = pIpAdapterInfo->Next;

cout<

評論

0

0

載入更多

vc++如何獲取本機所有mac地址 匿名使用者 1級 2018-11-20 回答

獲取網絡卡MAC地址,需要對本機網絡卡引數進行讀取,你可以參照如下網址解決C++列舉網絡卡獲取MAC地址操作。

http://www。oschina。net/code/snippet_105637_19921

vc++如何獲取本機所有mac地址 翱∞翔 1級 2018-11-20 回答

透過arp協議可以得到,

也可以透過查詢登錄檔的方式得到(沒有測試)

下面的程式碼是透過arp來得到的。ip地址可以是本機某網絡卡的地址,也可以是其它計算機的地址,得到的mac地址就是ip所對應的網絡卡mac地址

#include

#include

#include // for arp

#pragma comment ( lib, “iphlpapi。lib” )

#pragma comment (lib, “ws2_32。lib”)

void main(void)

{

wsadata wsd;

if (wsastartup(makeword(2, 2), &wsd) != 0)

{

return ;

}

struct in_addr sa;

sa。s_un。s_addr = inet_addr(“192。168。0。6”);

dword dwmacaddlen = 6;

byte pbymacaddress[6];

int i;

for (i = 0; i < 6; i ++) // try 6 times

{

if (sendarp(sa。s_un。s_addr, null, (dword *)&pbymacaddress, &dwmacaddlen) == no_error)

{

// got remote mac address

//stringcbprintf(strmacaddr, 18, _t(“%。2x-%。2x-%。2x-%。2x-%。2x-%。2x”), pbymacaddress[0], pbymacaddress[1],

// pbymacaddress[2], pbymacaddress[3], pbymacaddress[4], pbymacaddress[5]);

break;

}

sleep(200);

}

if (i == 6)

{

// failed

}

wsacleanup();

}