Qt之QNetworkAddressEntry

简述

QNetworkAddressEntry类由网络接口支持,存储了一个IP地址,子网掩码和广播地址。

每个网络接口可以包含零个或多个IP地址,进而可以关联到一个子网掩码和/或一个广播地址(取决于操作系统的支持)。

这个类代表一个这样的组。

常用接口

QHostAddress broadcast() const

返回IPv4地址和子网掩码相关联的广播地址。

对于IPv6地址来说,返回的总是空,因为广播的概念已被抛弃,为了系统支持多播。


QHostAddress ip() const

返回一个网络接口中存在的IPv4或IPv6地址。


QHostAddress netmask() const

返回与IP地址相关联的子网掩码。子网掩码是一个IP地址的形式表示,如255.255.0.0。

对于IPv6地址,前缀长度被转换成一个地址,其中设置为1的位数等于前缀长度。前缀长度为64位(最常见的值),子网掩码将被表示为一个地址为FFFF:FFFF:FFFF:FFFF::的QHostAddress。


int prefixLength() const

返回此IP地址的前缀长度。前缀长度和子网掩码中设置为1的位数相匹配。IPv4地址的值在0 - 32之间。IPv6地址的值在0 - 128之间,是表示数据的首选。

如果前缀长度不能确定,则返回0(即:netmask()返回一个空的QHostAddress())。

例如:

255.255.240.0 转换为二进制:11111111 11111111 11110000 00000000,那么前缀长度就是8*2 + 4 = 20(1的个数)。

ffff:ffff:ffff:ffff:: 转换为二进制:1111111111111111 1111111111111111 1111111111111111 1111111111111111,那么前缀长度就是16*4 = 64(1的个数)。

使用

QNetworkInterface类中提供了一个便利的静态函数allInterfaces(),用于返回所有的网络接口。

QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
foreach (QNetworkInterface netInterface, list) {
    QList<QNetworkAddressEntry> entryList = netInterface.addressEntries();
    foreach(QNetworkAddressEntry entry, entryList) {  // 遍历每一个IP地址
        qDebug() << "********************";
        qDebug() << "IP Address:" << entry.ip().toString();  // IP地址
        qDebug() << "Netmask:" << entry.netmask().toString();  // 子网掩码
        qDebug() << "Broadcast:" << entry.broadcast().toString();  // 广播地址
        qDebug() << "Prefix Length:" << entry.prefixLength();  // 前缀长度
    }
}

通过遍历每一个网络接口QNetworkInterface,根据其addressEntries()函数,我们可以很容易的获取到所有的QNetworkAddressEntry,然后通过ip()、netmask()、broadcast()函数获取对应的IP地址、子网掩码以及广播地址。

输出如下:


IP Address: “fe80::550c:ab19:fb48:1c9%15”
Netmask: “ffff:ffff:ffff:ffff::”
Broadcast: “”
Prefix Length: 64


IP Address: “169.254.1.201”
Netmask: “”
Broadcast: “”
Prefix Length: -1


IP Address: “fe80::d086:8566:6065:8954%11”
Netmask: “ffff:ffff:ffff:ffff::”
Broadcast: “”
Prefix Length: 64


IP Address: “172.18.4.165”
Netmask: “255.255.240.0”
Broadcast: “172.18.15.255”
Prefix Length: 20


IP Address: “fe80::f864:a962:7219:f98e%16”
Netmask: “ffff:ffff:ffff:ffff::”
Broadcast: “”
Prefix Length: 64


IP Address: “192.168.17.1”
Netmask: “255.255.255.0”
Broadcast: “192.168.17.255”
Prefix Length: 24


IP Address: “fe80::8169:691f:148e:d3cb%17”
Netmask: “ffff:ffff:ffff:ffff::”
Broadcast: “”
Prefix Length: 64


IP Address: “192.168.178.1”
Netmask: “255.255.255.0”
Broadcast: “192.168.178.255”
Prefix Length: 24


IP Address: “fe80::5996:27a3:83b5:2ae7%18”
Netmask: “ffff:ffff:ffff:ffff::”
Broadcast: “”
Prefix Length: 64


IP Address: “192.168.56.1”
Netmask: “255.255.255.0”
Broadcast: “192.168.56.255”
Prefix Length: 24


IP Address: “::1”
Netmask: “ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff”
Broadcast: “”
Prefix Length: 128


IP Address: “127.0.0.1”
Netmask: “”
Broadcast: “”
Prefix Length: -1

更多参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值