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

问题描述 投票:0回答:3

我正在尝试获取适用于 Windows/Linux/MAC 操作系统的笔记本电脑上所有可用物理端口的 MAC 地址。我还想检查是否可以检测到网线的物理连接/断开。

我尝试使用 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"<br/>
(IsUp|IsRunning|CanBroadcast|CanMulticast) "p2p0" QNetworkInterface::Wifi "XX:XX:XX:XX:XX:XX"<br/>
(IsUp|IsRunning|CanBroadcast|CanMulticast) "awdl0" QNetworkInterface::Wifi "XX:XX:XX:XX:XX:XX"<br/>
(IsUp|IsRunning|CanBroadcast|CanMulticast) "en1" QNetworkInterface::Ethernet "XX:XX:XX:XX:XX:XX"<br/>
(IsUp|IsRunning|CanBroadcast|CanMulticast) "en2" QNetworkInterface::Ethernet "XX:XX:XX:XX:XX:XX"<br/>
(IsUp|IsRunning|CanBroadcast|CanMulticast) "bridge0" QNetworkInterface::Unknown "XX:XX:XX:XX:XX:XX"

PS:“

XX:XX:XX:XX:XX:XX
”是他们的MAC地址

networking qt5 network-interface
3个回答
0
投票

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


0
投票

检查接口类型怎么样? QNetworkInterface::接口类型


0
投票

我找到了解决方案。经过大量分析后,我得出的结论是 Qt 无法获得更深入的操作系统细节。我们需要接触操作系统层来实现同样的目的。

  1. 对于 Windows -
MIB_IF_ROW2 ifRow; 
ifRow.InterfaceAndOperStatusFlags.ConnectorPresent

检查此标志以实现相同的目的。

  1. 适用于 MAC 操作系统
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 $2}'", "r");

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

© www.soinside.com 2019 - 2024. All rights reserved.