苹果系统。 Qt的。如何获得所有可用WiFi网络的SSID,BSSID和频道

时间:2013-12-03 11:31:07

标签: objective-c macos

如何使用Qt C ++在Mac OS下获取所有可用WiFi网络的SSID,BSSID和频道?

在Windows下我使用wlanapi.lib并通过WlanGetNetworkBssList方法获得提及的属性。有没有 在Mac OS下这样的事情?例如,CWNetwork个对象的列表。

我正在尝试以下列方式:

#import <CoreWLAN/CWInterface.h>

CWInterface *currentInterface = [CWInterface interfaceWithName:nil];

if (currentInterface == NULL)
    return false;

if([currentInterface power])
{
    NSError *err = nil;
    NSSet *scanResults =  [currentInterface scanForNetworksWithBSSID:nil error:&err];

    if (!err)
    {
        for(CWNetwork *network in scanResults)
        {
            //print SSID
        }
    }
}

但是“scanForNetworksWithBSSID:nil”的调用发生错误: “  信号名称:SIGTRAP  信号含义:跟踪/断点陷阱 “

这是什么意思? 你可以在这个建议吗?

2 个答案:

答案 0 :(得分:0)

您始终可以使用QProcess并执行终端命令:

QStringList arguments;
arguments << "-I";
QProcess process;
process.start("/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport", arguments);

这将使用-I标志触发机场命令,以显示有关您当前所在的无线网络的信息。

答案 1 :(得分:0)

以下是您可以检索的属性

CWInterface* wifi = [[CWWiFiClient sharedWiFiClient] interface];
NSArray *networkScan = [[wifi scanForNetworksWithName:nil error:nil] allObjects];
for (CWNetwork *network in networkScan) {
    NSLog ( @"SSID: %@ ,\n \
           BSSID: %@ , \n \
           rssiValue: %ld , \n \
           noiseMeasurement: %ld, \n\
           beaconInterval: %ld , \n \
           countryCode: %@ \n ,\
           ibss: %i ,\n\
           wlanChannel: %@ , \n\
           ", [network ssid],[network bssid],[network rssiValue],[network noiseMeasurement],(long)[network beaconInterval], [network countryCode] , [network ibss], [[network wlanChannel]description]);

}