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

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