vc++如何獲取本機所有mac地址
下面的程式碼是透過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
載入更多
透過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
載入更多
以下是參考程式碼:
// 標頭檔案包含
#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 載入更多 獲取網絡卡MAC地址,需要對本機網絡卡引數進行讀取,你可以參照如下網址解決C++列舉網絡卡獲取MAC地址操作。 http://www。oschina。net/code/snippet_105637_19921
透過arp協議可以得到,
也可以透過查詢登錄檔的方式得到(沒有測試)
下面的程式碼是透過arp來得到的。ip地址可以是本機某網絡卡的地址,也可以是其它計算機的地址,得到的mac地址就是ip所對應的網絡卡mac地址
#include
#include
#include
#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();
}