文章目录
一、背景信息
电脑有一个或者多个网卡,如下图所示:
一个网卡又可以配有多个IP地址,包括 IPv4 和 IPv6 地址:
二、代码实现
以下代码实现了查找电脑所有网卡,并获取某个网卡的 IP 等信息:
cpp
int main() {
// 获取所有网卡信息
QComboBox *m_netCardComboBox;
QList<QNetworkInterface> m_allInterfaces = QNetworkInterface::allInterfaces();
for (int i = 0; i < m_allInterfaces.size(); ++i) {
QNetworkInterface netInterface = m_allInterfaces.at(i);
// 过滤掉不活动的接口,把活跃的网卡名称添加到下拉框控件
if (netInterface.flags().testFlag(QNetworkInterface::IsUp) &&
netInterface.flags().testFlag(QNetworkInterface::IsRunning)) {
m_netCardComboBox->addItem(netInterface.humanReadableName());
}
}
// 获取当前下拉框选择的网卡IP等信息
{
int currentIndex = m_netCardComboBox->currentIndex();
QNetworkInterface netInterface = m_allInterfaces.at(currentIndex);
QList<QNetworkAddressEntry> addressEntries = netInterface.addressEntries();
for (int k = 0; k < addressEntries.size(); ++k) {
QNetworkAddressEntry entry = addressEntries.at(k);
if (entry.ip().protocol() == QAbstractSocket::IPv4Protocol) { // 这里筛选一下IPv4地址
qDebug() << addressEntries.at(k).ip().toString();
qDebug() << addressEntries.at(k).netmask().toString();
qDebug() << addressEntries.at(k).broadcast().toString();
}
}
}
return 0;
}