Qt 中是否有任何 API 或标志来检查 Windows/Linux/MAC OS 上可用的物理网络 interface/ports?

Is there any API or Flags in Qt to check available physical network interface/ports on Windows/Linux/MAC OS?

我正在尝试为 Windows/Linux/MAC OS 获取笔记本电脑上所有可用物理端口的 MAC 地址。我还想检查一下我是否可以检测到网线的物理 connection/disconnection。

我尝试使用 QNetworkInterface API,但它为我提供了所有物理和逻辑接口。我不知道如何区分物理端口。我们有这样做的标志吗?

我试过一些代码

    foreach(QNetworkInterface netInterface, QNetworkInterface::allInterfaces())
    {
        if (!(netInterface.flags() & QNetworkInterface::Ethernet))
        {
            return netInterface.hardwareAddress();
        }
    }

以下是我的 MAC

的网络接口、名称、类型和硬件地址的结果

(IsUp|IsRunning|CanBroadcast|CanMulticast) "en0" QNetworkInterface::Wifi "XX:XX:XX:XX:XX:XX"
(IsUp|IsRunning|CanBroadcast|CanMulticast) "p2p0" QNetworkInterface::Wifi "XX:XX:XX:XX:XX:XX"
(IsUp|IsRunning|CanBroadcast|CanMulticast) "awdl0" QNetworkInterface::Wifi "XX:XX:XX:XX:XX:XX"
(IsUp|IsRunning|CanBroadcast|CanMulticast) "en1" QNetworkInterface::Ethernet "XX:XX:XX:XX:XX:XX"
(IsUp|IsRunning|CanBroadcast|CanMulticast) "en2" QNetworkInterface::Ethernet "XX:XX:XX:XX:XX:XX"
(IsUp|IsRunning|CanBroadcast|CanMulticast) "bridge0" QNetworkInterface::Unknown "XX:XX:XX:XX:XX:XX"

PS: "XX:XX:XX:XX:XX:XX" 是他们的 MAC 地址

试试 QNetworkConfigurationManager https://doc.qt.io/qt-5/qnetworkconfigurationmanager.html

检查接口类型呢? QNetworkInterface::InterfaceType

我找到了解决办法。在做了很多分析之后,我得出的结论是 Qt 无法获得更深入的 OS 细节。我们需要触摸 OS 层来实现相同的效果。

  1. 为Windows-
MIB_IF_ROW2 ifRow; 
ifRow.InterfaceAndOperStatusFlags.ConnectorPresent

检查此标志以达到相同目的。

  1. 对于MACOS
static_cast<SCNetworkInterfaceRef>(CFArrayGetValueAtIndex(physicalVLANInterfaces, i)) for all CFIndex
  1. 对于Linux
File *fp = popen("lshw -class network | grep -A 1 \"bus info\" | grep name | awk -F': ' '{print }'", "r");

不确定是否有比这更好的解决方案。但这最适合我。