2

我需要在C++中的Mac OS X Linux 中扫描并收集有关本地Wifi接入点的信息。这可能使用或类似的东西。我有类似的代码在 Windows 中工作,不可能被翻译。WlanWlanScan

此代码正在 FireBreath 开发项目中构​​建。

您有在 Mac 上用 C++ 扫描 Wifi 接入点的示例或建议吗?

4

1 回答 1

3

你不能在普通的 C++ 中做到这一点,但你可以使用 Objective-C++(你的源文件只需要有 .mm 扩展名,你可以在你的 C++ 代码中使用 Objective-C)。看看CoreWLAN框架。你应该这样写:

#import <CoreWLAN/CoreWLAN.h>

struct AccessPoint
{
    string ssid;
    string bssid;
    int rssi;
};

vector<AccessPoint> ScanAir(const string& interfaceName)
{
    NSString* ifName = [NSString stringWithUTF8String:interfaceName.c_str()];
    CWInterface* interface = [CWInterface interfaceWithName:ifName];

    NSError* error = nil;
    NSArray* scanResult = [[interface scanForNetworksWithSSID:nil error:&error] allObjects];
    if (error)
    {
        NSLog(@"%@ (%ld)", [error localizedDescription], [error code]);
    }

    vector<AccessPoint> result;
    for (CWNetwork* network in scanResult)
    {
        AccessPoint ap;
        ap.ssid  = string([[network ssid] UTF8String]);
        ap.bssid = string([[network bssid] UTF8String]);
        ap.rssi = [network rssiValue];
        result.push_back(ap);
    }

    return result;
}

我没有测试这段代码,但我在我的项目中使用了类似的代码,所以它应该可以工作。另请注意,我在这里使用 ARC。如果您遇到一些错误 - 请随时在评论中提问。
苹果文档中也有示例,但它有些过时(适用于 OS X 10.6)。OS X 10.7 有一些变化。

请注意,CoreWLAN 框架需要 OS X 10.6 或更高版本。

于 2013-04-03T06:13:34.373 回答