qt获取本机实际ip地址,不包括169开头的

#include <qnetworkinterface.h>

QString GetLocalmachineIP()
{
    QString ipAddress;
    QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses();
    for(QHostAddress &addr : ipAddressesList)
    {
        // 找到不是本地ip,并且是ipv4协议,并且不是169开头的第一个地址
        if(addr != QHostAddress::LocalHost && addr.protocol() == QAbstractSocket::IPv4Protocol && !addr.toString().startsWith("169"))
        {
            ipAddress = addr.toString();
            break;
        }
    }
    // if we did not find one, use IPv4 localhost
    if (ipAddress.isEmpty())
        ipAddress = QHostAddress(QHostAddress::LocalHost).toString();
    return ipAddress;
}
QNetworkInterface::allAddresses() 里面获取的地址有包括ipv4和ipv6的,本地ip有127.0.0.1的,如果接到路由器的话,还有169.254.xx.xx的,169开头的是私有地址,没法使用,因此要去掉169开头的地址,比如我获取的本机地址有:

这里面就要获取出真正的ipv4的192.168.0.237这个地址,而不是一堆169开头的地址。使用上面的代码就可以获得。

要使用头文件#include <qnetworkinterface.h>,需要在qt工程加上QT += network

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章