本文主要是介绍C++实现获取本机MAC地址与IP地址,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《C++实现获取本机MAC地址与IP地址》这篇文章主要为大家详细介绍了C++实现获取本机MAC地址与IP地址的两种方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...
实际工作中,项目上常常需要获取本机的IP地址和MAC地址,在此使用两种方案获取
1.MFC中获取IP和MAC地址
获取IP需要添加"WS2_32.lib"库
话不多说代码如下
//获取MAC地址 std::string OnGetLocalMac() { string* pstrMacs; std::string strMac; int nMacCount; PIP_ADAPTER_INFO pAdapterInfo; PIP_ADAPTER_INFO pAdapterInfo1 = NULL; dwORD AdapterInfoSize; char szMac[33] = {0}; DWORD Err; AdapterInfoSize = 0; Err = GetAdaptersInfo(NULL, &AdapterInfoSize); if((Err != 0) && (Err != ERROR_BUFFER_OVERFLOW)) { goto err; } // 分配网卡信息内存 pAdapterInfo = (PIP_ADAPTER_INFO)GlobalAlloc(GPTR, AdapterInfoSize); if(pAdapterInfo == NULL) { goto err; } if(GetAdaptersInfo(pAdapterInfo, &AdapterInfoSize) != 0) { GlobalFree(pAdapterInfo); goto err; } pAdapterInfo1 = pAdapterInfo; nMacCount = 0; while(pAdapterInfo1) { nMacCount++; pAdapterInfo1= pAdapterInfo1->Next; } if(nMacCount <= 0) { GlobalFree(pAdapterInfo); goto err; } pstrMacs = new string[nMacCount]; pAdapterInfo1 = pAdapterInfo; for (int i = 0; i < nMacCount; i++) { memset(szMac, 0, sizeof(szMac)); sprintf_s(szMac, 32, "%02X:%02X:%02X:%02X:%02X:%02X", pAdapterInfo1->Address[0], pAdapterInfo1->Address[1], pAdapterInfo1->Address[2www.chinasem.cn], pAdapterInfo1->Address[3], pAdapterInfo1->Address[4], pAdapterInfo1->Address[5]); _strupr_s(szMac,32); pstrMacs[i] = szMac; pAdapterInfo1 = pAdapterInfo1->Next; } GlobalFree(pAdapterInfo); err: //这里只取第一个地址,多个MAC地址是无法确认使用的哪个 strMac = pstrMacs[0]; return strMac ; } //获取IP地址 #pragma comment(lib, "WS2_32.lib") std::string OnGetLocalIP() { long lRet = 0; char szHostName[256] = {0}; long lHostNameLen = 256; int nRet = 0; hostent *phost = NULL; std::string strHostIp = ""; //这种方式获取不到,改用下面的方式 //for(jsint i=0;phost!=NULL&&phost->h_addr_list[i]!=NULL;i++) //{ // char* pszHostIP=inet_ntoa(*(struct in_addr*)phost->h_addr_list[i]); // strHostIp=pszHostIP; //} //通过下面的gethostname获取 WSADATA WSAData; if (!WSAStartup(MAKEWORD(2, 0),&WSAData)) { if(!gethostname(szHostName,sizeof(szHostName))) { js hostent *host=gethostbyname(szHostName); if(hhttp://www.chinasem.cnost!=NULL) { char* pszHostIP = inet_ntoa(*(struct in_addr*)*host->h_addr_list); strHostIp = pszHostIP; } } } return strHostIp; }
2.以上是VS C++中常用的获取方式,如果使用Qt,可以用Qt的库获取的就更为简单
//需要添加头文件 #include <QNetworkInterface> QString GetMac() { QString strMacAddr = ""; QList<QNetworkInterface> ifaces = QNetworkInterface::allInterfaces();//获取所有网卡信息 for (int i = 0; i < ifaces.count(); i++) { QNetworkInterface iface = ifaces.at(i); if ( iface.flags().testFlag(QNetworkInterface::IsUp) && iface.flags().testFlag(QNetworkInterface::IsRunning) && !iface.flags().testFlag(QNetworkInterface::IsLoopBack)) { for (int j=0; j<iface.addressEntries().count(); j++) { strMacAddr = iface.hardwareAddress(); i = ifaces.count(); //跳出外层循环 break; } } } return strMacAddr; } QString GetIP() { QString strIPAddr = ""; foreach (QHostAddress ptr , QNetworkInterfacephp::allAddresses()) { if(ptr.protocol() == QAbstractSocket::IPv4Protocol){// 获取ipv4地址 if(!ptr.isLoopback()){ // 过滤本地回环127.0.0.1 strIPAddr = ptr.toString(); break; } } } return strIPAddr; }
以上为VS和Qt中获取本机IP和MAC的方法。
到此这篇关于C++实现获取本机MAC地址与IP地址的文章就介绍到这了,更多相关C++获取本机MAC地址内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!
这篇关于C++实现获取本机MAC地址与IP地址的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!