C/C++:Windows程式設計—程式碼獲取本地所有網絡卡資訊(網絡卡描述,IP地址,子網掩碼,MAC地址)
阿新 • • 發佈:2018-12-08
先看效果
看程式碼
使用 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++的專案程式碼。