1. 程式人生 > >C/C++:Windows程式設計—程式碼獲取本地所有網絡卡資訊(網絡卡描述,IP地址,子網掩碼,MAC地址)

C/C++:Windows程式設計—程式碼獲取本地所有網絡卡資訊(網絡卡描述,IP地址,子網掩碼,MAC地址)

先看效果

在這裡插入圖片描述

看程式碼

使用 GetAdaptersInfo 函式獲取網絡卡的所有資訊。
MSDN函式說明 https://docs.microsoft.com/en-us/windows/desktop/api/iphlpapi/nf-iphlpapi-getadaptersinfo

#include <iostream>
#include <vector>
#include <WinSock2.h>
#include <Iphlpapi.h>
//#pragma comment(lib,"Iphlpapi.lib") //需要Iphlpapi.lib庫 ,devc++中 專案 -> 專案選項-> 引數 -> 新增連結庫 libiphlpapi.a (D:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib\libiphlpapi.a) 
using namespace std;

static const  int ADAPTERNUM  = 10; 
void getAllAdapterInfo(){
	
	PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO[ADAPTERNUM];// 10個網絡卡空間 足夠了 
	unsigned long stSize = sizeof(IP_ADAPTER_INFO) * ADAPTERNUM;
	// 獲取所有網絡卡資訊,引數二為輸入輸出引數 
	int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
	// 空間不足
	if (ERROR_BUFFER_OVERFLOW == nRel) {
		// 釋放空間
		if(pIpAdapterInfo!=NULL)
			delete[] pIpAdapterInfo;
		return; 
	}
	
	PIP_ADAPTER_INFO cur =   pIpAdapterInfo;
	// 多個網絡卡 通過連結串列形式連結起來的 
	while(cur){
		cout<<"網絡卡描述:"<<cur->Description<<endl;
		switch (cur->Type) {
			case MIB_IF_TYPE_OTHER:
				break;
			case MIB_IF_TYPE_ETHERNET:
				{
					IP_ADDR_STRING *pIpAddrString =&(cur->IpAddressList);
					cout << "IP:" << pIpAddrString->IpAddress.String << endl;
					cout << "子網掩碼:" << 	pIpAddrString->IpMask.String <<endl;
				}
				break;
			case MIB_IF_TYPE_TOKENRING:
				break;
			case MIB_IF_TYPE_FDDI:
				break;
			case MIB_IF_TYPE_PPP:
				break;
			case MIB_IF_TYPE_LOOPBACK:
				break;
			case MIB_IF_TYPE_SLIP:
				break;
			default://無線網絡卡,Unknown type
				{
					IP_ADDR_STRING *pIpAddrString =&(cur->IpAddressList);
					cout << "IP:" << pIpAddrString->IpAddress.String << endl;
					cout << "子網掩碼:" << 	pIpAddrString->IpMask.String <<endl;
				}
				break;
		}
	    char hex[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'} ;
		
		// mac 地址一般6個位元組 
		// mac 二進位制轉16進位制字串
		char macStr[18] = {0};//12+5+1
		int k = 0;
		for(int j = 0; j < cur->AddressLength; j++){
			macStr[k++] = hex[(cur->Address[j] & 0xf0) >> 4];
			macStr[k++] = hex[cur->Address[j] & 0x0f];
			macStr[k++] = '-'; 
		} 
		macStr[k-1] = 0;
		
		cout<<"MAC:" << macStr << endl; // mac地址 16進位制字串表示 
		cur = cur->Next;
		cout << "--------------------------------------------------" << endl;
	}
	
	// 釋放空間
	if(pIpAdapterInfo!=NULL)
		delete[] pIpAdapterInfo;
} 
int main(int argc, char* argv[])
{
	getAllAdapterInfo();
	return 0;
}

專案工程

如果你的跑不起來,可以下載完整devc++的專案程式碼