如何在Mac OS X上用C ++扫描Wifi接入点

时间:2013-04-03 02:43:22

标签: c++ macos network-programming wifi firebreath

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

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

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

1 个答案:

答案 0 :(得分: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。如果您有任何错误 - 请随时在评论中提问 苹果文档中也有example,但它有些过时(适用于OS X 10.6)。 OS X 10.7有一些变化。

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