QT获取本地的主机网络信息

QHostInfo 类:查询与特定主机名相关联的主机的IP地址,或者与一个IP地址相关联的主机名。

QHostAddress 类:提供一个IP地址,可提供独立于平台和协议的方式来保存 IPv4和IPv6 地址。

QNetworkInterface 类:负责提供主机IP地址和网络接口的列表,表示了当前程序正在运行时与主机绑定的一个网络接口。

QNetworkAddressEntry 类:存储了一个网络接口所支持的一个IP地址,同时还有与之相关的子网掩码和广播地址。

#include <QCoreApplication>

#include <QHostInfo>
#include <QNetworkInterface>
#include <QString>

void getHostInformation();

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    getHostInformation();

    return a.exec();
}

void getHostInformation()
{

    /***********************************************************/
    //QHostInfo 提供一系列有关网络信息的静态函数,可获取主机名、IP地址
    QString localHostName = QHostInfo::localHostName();         // 获取本机主机名
    qDebug() << "主机名: " << localHostName;
    qDebug() << endl;

    /***********************************************************/
    //根据主机名获取相关主机信息,包括IP地址。
    QHostInfo hostInfo = QHostInfo::fromName(localHostName);
    QList<QHostAddress> addrList = hostInfo.addresses();        // 获取本主机上的IP地址列表
    qDebug() << "本主机上的IP地址列表,总计: " << addrList.count() ;

    /***********************************************************/
    foreach (QHostAddress var, addrList) {
        qDebug() << var.toString(); //本机IP地址列表
    }
    qDebug() << endl;

    /***********************************************************/
    if(!addrList.isEmpty()) //获得的主机IP地址列表可能为空。
    {
        // 在不为空情况下使用第一个IP地址,可能IPv6,也可能IPv4
        qDebug() << "first ip addr:" << addrList.first().toString();
    }
    qDebug() << endl;

    /***********************************************************/
    QString ipAddress;
    //QList<QHostAddress> addrList = QNetworkInterface::allAddresses(); //仅仅获取IP地址列表
    for (int i = 0; i < addrList.size(); ++i) {
        if (addrList.at(i) != QHostAddress::LocalHost &&
            addrList.at(i).toIPv4Address()) { //是IPv4地址且非 QHostAddress::LocalHost
            ipAddress = addrList.at(i).toString();
            qDebug() << "first ipv4 addr:" << ipAddress;// 在不为空情况下使用第一个IPv4地址
            break;
        }
    }
    qDebug() << endl;

    /***********************************************************/
    // 获取本机的网络接口列表
    QList<QNetworkInterface> ifaceList = QNetworkInterface::allInterfaces();
    for (int i = 0; i < ifaceList.count(); i++){
        QNetworkInterface var = ifaceList.at(i);
        qDebug() << QString("########## 设备%1 ############").arg(i);
        qDebug() << QString("接口名称:") << var.humanReadableName();
        qDebug() << QString("设备名称:") << var.name();
        qDebug() << QString("硬件地址:") << var.hardwareAddress();

        /***********************************************************/
        // 读取一个IP地址的关联信息列表
        QList<QNetworkAddressEntry> entryList = var.addressEntries();
        //qDebug() << "IP地址的关联信息列表: ";
        //foreach(QNetworkAddressEntry entry, entryList){
            //qDebug() << "IP: " << entry.ip().toString();
            //qDebug() << "子网掩码:" << entry.netmask().toString();
            //qDebug() << "广播地址:" << entry.broadcast().toString();
        //}

        /***********************************************************/
        // 读取一个IPv4地址的关联信息列表
        //qDebug() << "IPv4地址的关联信息列表: ";
        foreach(QNetworkAddressEntry ipv4entry, entryList){
            if (ipv4entry.ip().toIPv4Address())
            {
                qDebug() << "IP: " << ipv4entry.ip().toString();
                qDebug() << "子网掩码:" << ipv4entry.netmask().toString();
                qDebug() << "广播地址:" << ipv4entry.broadcast().toString();
            }

        }
    }

    /***********************************************************/
}


版权声明: 此文为本站源创文章[或由本站编辑从网络整理改编],
转载请备注出处:
[CSDN] https://blog.csdn.net/hebbely/article/details/78246354
[若此文确切存在侵权,请联系本站管理员进行删除!]


--THE END--