简述
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