Qt中 IPv4和Mac的相互获取
/**
* @brief 根据MAC地址获取对应的IPv4地址
* @param targetMac 目标MAC地址,格式如 "00:11:22:AA:BB:CC"
* @return 对应的IPv4地址字符串,如果未找到则返回空字符串
*/
QString getIPv4ByMac(const QString &targetMac)
{
// 1. 获取所有网络接口列表
QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();
// 2. 遍历所有接口
for (const QNetworkInterface &interface : interfaces) {
// 3. 检查当前接口的MAC地址是否与目标MAC匹配
// 为了更健壮,可以先将MAC地址转为大写再比较
if (interface.hardwareAddress().toUpper() == targetMac.toUpper()) {
// 4. 找到匹配的接口后,遍历其所有地址条目
QList<QNetworkAddressEntry> entries = interface.addressEntries();
for (const QNetworkAddressEntry &entry : entries) {
QHostAddress ip = entry.ip();
// 5. 筛选出IPv4协议的地址
if (ip.protocol() == QAbstractSocket::IPv4Protocol) {
return ip.toString();
}
}
}
}
// 如果遍历完所有接口都没有找到,返回空字符串
return QString();
}
/**
* @brief 根据指定的 IPv4 地址查找对应的 MAC 地址
* @param targetIp 目标 IPv4 地址字符串,例如 "192.168.1.100"
* @return 对应的 MAC 地址字符串,如果未找到则返回空字符串
*/
QString getMacByIp(const QString &targetIp)
{
QHostAddress targetAddress(targetIp);
// 确保传入的是有效的 IPv4 地址
if (targetAddress.protocol() != QAbstractSocket::IPv4Protocol) {
qDebug() << "错误:请输入有效的 IPv4 地址";
return QString();
}
// 1. 获取所有网络接口
QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();
// 2. 遍历所有接口
for (const QNetworkInterface &interface : interfaces) {
// 过滤掉未启动或回环的接口
if (!(interface.flags() & QNetworkInterface::IsUp) ||
(interface.flags() & QNetworkInterface::IsLoopBack)) {
continue;
}
// 3. 获取当前接口的所有地址条目
QList<QNetworkAddressEntry> entries = interface.addressEntries();
for (const QNetworkAddressEntry &entry : entries) {
QHostAddress ip = entry.ip();
// 4. 检查是否为 IPv4 地址,并与目标地址比较
if (ip.protocol() == QAbstractSocket::IPv4Protocol && ip == targetAddress) {
// 找到匹配的 IP,返回该接口的 MAC 地址
return interface.hardwareAddress();
}
}
}
// 未找到匹配的 IP 地址
return QString();
}目录 返回
首页