我正在尝试获取适用于 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地址
尝试 QNetworkConfigurationManager https://doc.qt.io/qt-5/qnetworkconfigurationmanager.html
检查接口类型怎么样? QNetworkInterface::接口类型
我找到了解决方案。经过大量分析后,我得出的结论是 Qt 无法获得更深入的操作系统细节。我们需要接触操作系统层来实现同样的目的。
MIB_IF_ROW2 ifRow;
ifRow.InterfaceAndOperStatusFlags.ConnectorPresent
检查此标志以实现相同的目的。
static_cast<SCNetworkInterfaceRef>(CFArrayGetValueAtIndex(physicalVLANInterfaces, i)) for all CFIndex
File *fp = popen("lshw -class network | grep -A 1 \"bus info\" | grep name | awk -F': ' '{print $2}'", "r");
不确定是否有比这更好的解决方案。但这最适合我。