Obtaining MAC address on windows in Qt

痞子三分冷 提交于 2019-12-01 15:17:54

With Qt and the QtNetwork module, you can get one of the MAC addresses like that:

QString getMacAddress()
{
    foreach(QNetworkInterface netInterface, QNetworkInterface::allInterfaces())
    {
        // Return only the first non-loopback MAC Address
        if (!(netInterface.flags() & QNetworkInterface::IsLoopBack))
            return netInterface.hardwareAddress();
    }
    return QString();
}

I was looking for the same and had some problems with virtual machines and different types of bearers, here's another approach that I found:

QNetworkConfiguration nc;
QNetworkConfigurationManager ncm;
QList<QNetworkConfiguration> configsForEth,configsForWLAN,allConfigs;
// getting all the configs we can
foreach (nc,ncm.allConfigurations(QNetworkConfiguration::Active))
{
    if(nc.type() == QNetworkConfiguration::InternetAccessPoint)
    {
        // selecting the bearer type here
        if(nc.bearerType() == QNetworkConfiguration::BearerWLAN)
        {
            configsForWLAN.append(nc);
        }
        if(nc.bearerType() == QNetworkConfiguration::BearerEthernet)
        {
            configsForEth.append(nc);
        }
    }
}
// further in the code WLAN's and Eth's were treated differently
allConfigs.append(configsForWLAN);
allConfigs.append(configsForEth);
QString MAC;
foreach(nc,allConfigs)
{
    QNetworkSession networkSession(nc);
    QNetworkInterface netInterface = networkSession.interface();
    // these last two conditions are for omiting the virtual machines' MAC
    // works pretty good since no one changes their adapter name
    if(!(netInterface.flags() & QNetworkInterface::IsLoopBack)
            && !netInterface.humanReadableName().toLower().contains("vmware")
            && !netInterface.humanReadableName().toLower().contains("virtual"))
    {
        MAC = QString(netInterface.hardwareAddress());
        break;
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!