先看效果
看代碼
使用 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+1int 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++的項目代碼。
總結
以上是生活随笔為你收集整理的C/C++:Windows编程—代码获取本地所有网卡信息(网卡描述,IP地址,子网掩码,MAC地址)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。