简述
QNetworkInterface类负责提供主机的IP地址和网络接口的列表。
QNetworkInterface表示了当前程序正在运行时与主机绑定的一个网络接口。每个网络接口可能包含0个或多个IP地址,每个IP地址都可选择性地与一个子网掩码和/或一个广播地址相关联。这样的列表可以通过addressEntries()方法获得。当子网掩码或者广播地址不必要时,可以使用allAddresses()便捷函数来仅仅获得IP地址。
QNetworkInterface使用hardwareAddress()方法获取接口的硬件地址。
不是所有的操作系统都支持这些所有的特性。只有IPv4地址可以保证在所有平台上都能被这个类列举出来,尤其是IPv6地址的列举目前只支持Windows XP及相关版本、Linux、MacOS和BSDs。
获取所有IP地址
这个便利函数返回主机上面发现的所有IP地址。相当于allInterfaces()返回的所有对象调用addressEntries()来获取QHostAddress对象列表,然后每一个对象调用QHostAddress::ip()方法。
QList<QHostAddress> list = QNetworkInterface::allAddresses();
foreach (QHostAddress address, list) {
qDebug() << address;
}
获取网络接口列表
hardwareAddress()返回硬件地址。对以太网接口,这是一个用字符串表示的MAC地址(冒号分隔)。其它接口类型可能使用其他类型的硬件地址,不要依靠这个函数来返回一个合法的MAC地址。
foreach (QNetworkInterface netInterface, list) {
// 设备名
qDebug() << "Device:" << netInterface.name();
// 硬件地址
qDebug() << "HardwareAddress:" << netInterface.hardwareAddress();
QList<QNetworkAddressEntry> entryList = netInterface.addressEntries();
// 遍历每一个IP地址(每个包含一个IP地址,一个子网掩码和一个广播地址)
foreach(QNetworkAddressEntry entry, entryList) {
// IP地址
qDebug() << "IP Address:" << entry.ip().toString();
// 子网掩码
qDebug() << "Netmask:" << entry.netmask().toString();
// 广播地址
qDebug() << "Broadcast:" << entry.broadcast().toString();
}
}