2

Mac OS X Linux in C++で、ローカル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 を使用していることにも注意してください。エラーが発生する場合は、コメントでお気軽にお問い合わせください。Apple のドキュメントに
例がありますが、やや古くなっています (OS X 10.6 用です)。OS X 10.7 ではいくつかの変更がありました。

CoreWLAN フレームワークには OS X 10.6 以降が必要であることに注意してください。

于 2013-04-03T06:13:34.373 に答える