feat: NetworkMointor::validAddresses, return the useable ip4 and ip6 address
This commit is contained in:
parent
3c140ed479
commit
fb60189078
2 changed files with 32 additions and 13 deletions
|
|
@ -54,8 +54,10 @@ void NetworkMonitor::stopMonitoring()
|
||||||
|
|
||||||
QStringList NetworkMonitor::validAddresses() const
|
QStringList NetworkMonitor::validAddresses() const
|
||||||
{
|
{
|
||||||
QList<QHostAddress> physicalIPs;
|
QList<QHostAddress> physicalIP4;
|
||||||
QList<QHostAddress> virtualIPs;
|
QList<QHostAddress> physicalIP6;
|
||||||
|
QList<QHostAddress> virtualIP4;
|
||||||
|
QList<QHostAddress> virtualIP6;
|
||||||
QSet<QHostAddress> uniqueAddresses;
|
QSet<QHostAddress> uniqueAddresses;
|
||||||
|
|
||||||
const auto allInterfaces = QNetworkInterface::allInterfaces();
|
const auto allInterfaces = QNetworkInterface::allInterfaces();
|
||||||
|
|
@ -72,33 +74,50 @@ QStringList NetworkMonitor::validAddresses() const
|
||||||
for (const auto &entry : addressEntries) {
|
for (const auto &entry : addressEntries) {
|
||||||
const QHostAddress address = entry.ip();
|
const QHostAddress address = entry.ip();
|
||||||
|
|
||||||
if (address.protocol() != QAbstractSocket::IPv4Protocol || address.isLinkLocal() || address.isLoopback() ||
|
if (address.isLinkLocal() || address.isLoopback() || uniqueAddresses.contains(address)) {
|
||||||
uniqueAddresses.contains(address)) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
uniqueAddresses.insert(address);
|
uniqueAddresses.insert(address);
|
||||||
|
|
||||||
if (isVirtual) {
|
if (address.protocol() == QHostAddress::IPv6Protocol) {
|
||||||
virtualIPs.append(address);
|
if (isVirtual)
|
||||||
|
virtualIP6.append(address);
|
||||||
|
else
|
||||||
|
physicalIP6.append(address);
|
||||||
} else {
|
} else {
|
||||||
physicalIPs.append(address);
|
if (isVirtual)
|
||||||
|
virtualIP4.append(address);
|
||||||
|
else
|
||||||
|
physicalIP4.append(address);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ranges::sort(physicalIPs, [](const QHostAddress &a, const QHostAddress &b) {
|
std::ranges::sort(physicalIP4, [](const QHostAddress &a, const QHostAddress &b) {
|
||||||
if (a.isPrivateUse() != b.isPrivateUse())
|
if (a.isPrivateUse() != b.isPrivateUse())
|
||||||
return a.isPrivateUse();
|
return a.isPrivateUse();
|
||||||
return a.toIPv4Address() < b.toIPv4Address();
|
return a.toIPv4Address() < b.toIPv4Address();
|
||||||
});
|
});
|
||||||
|
|
||||||
std::ranges::sort(virtualIPs, [](const QHostAddress &a, const QHostAddress &b) {
|
std::ranges::sort(virtualIP4, [](const QHostAddress &a, const QHostAddress &b) {
|
||||||
return a.toIPv4Address() < b.toIPv4Address();
|
return a.toIPv4Address() < b.toIPv4Address();
|
||||||
});
|
});
|
||||||
|
|
||||||
auto result = physicalIPs;
|
std::ranges::sort(physicalIP6, [](const QHostAddress &a, const QHostAddress &b) {
|
||||||
result.append(virtualIPs);
|
if (a.isPrivateUse() != b.isPrivateUse())
|
||||||
|
return a.isPrivateUse();
|
||||||
|
return a.toString() < b.toString();
|
||||||
|
});
|
||||||
|
|
||||||
|
std::ranges::sort(virtualIP6, [](const QHostAddress &a, const QHostAddress &b) {
|
||||||
|
return a.toString() < b.toString();
|
||||||
|
});
|
||||||
|
|
||||||
|
auto result = physicalIP4;
|
||||||
|
result.append(virtualIP4);
|
||||||
|
result.append(physicalIP6);
|
||||||
|
result.append(virtualIP6);
|
||||||
|
|
||||||
QStringList ipList;
|
QStringList ipList;
|
||||||
for (const auto &host : result) {
|
for (const auto &host : result) {
|
||||||
|
|
|
||||||
|
|
@ -47,8 +47,8 @@ public:
|
||||||
void stopMonitoring();
|
void stopMonitoring();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get list of all available IPv4 addresses (excluding local and link-local addresses)
|
* @brief Get list of all available IP addresses (excluding local and link-local addresses)
|
||||||
* @return IPv4 address list
|
* @return IP address list
|
||||||
*/
|
*/
|
||||||
QStringList validAddresses() const;
|
QStringList validAddresses() const;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue