【问题标题】:can't get actual bssid value on MacOS在 MacOS 上无法获得实际的 bssid 值
【发布时间】:2019-07-02 19:40:44
【问题描述】:

我试图在 Mac OS X 10.14 上获取当前 WiFi 连接的 BSSID,但得到 nil

返回nil的代码如下:

NSString *bssid = [[[CWWiFiClient sharedWiFiClient] interface] bssid];

虽然 SSID 返回有效值:

NSString *ssid = [[[CWWiFiClient sharedWiFiClient] interface] ssid];

其他解决方案适用于 iOS,例如使用此处提出的 CaptiveNetworks 框架 How do I get the current access point's MAC address/BSSID?,但某些方法,例如 CNCopyCurrentNetworkInfo - MacOS 不支持。

【问题讨论】:

  • 不,@CinderBiscuits,这不是重复,因为我的问题是关于 MacOS 而不是 iOS
  • 您是否尝试过其他问题的解决方案?您对 MacOS 和 iOS 使用相同的 API。
  • 我提出的解决方案的问题在于 CNCopyCurrentNetworkInfo 仅在 iOS 上受支持。我得到 BSSID 在单独的进程中执行 /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I 并解析结果,但它看起来不是一个好的解决方案..
  • @atlascoder 你找到解决方案了吗?

标签: objective-c macos


【解决方案1】:

我在 OSX 上的两分钱,以防万一:

  • 使用 CoreWLAN
  • 添加网络扩展
  • 呼叫:

       let client = CWWiFiClient.shared()
        guard let interfaces : [CWInterface] = client.interfaces() else{
            return nil
        }
    
        // on iOS we got the first, here we should return multiple interfaces.
        var ssid: String?
        var bssid: String?
        var interfaceNameString: String?
    
        for interface in interfaces{
    
            ssid = interface.ssid()
            bssid = interface.bssid()
            interfaceNameString = interface.interfaceName
         ...
    

}

小心激活:

如果在 OSX 的 App Store 上,激活沙盒时。

【讨论】:

    【解决方案2】:

    这不是最好的解决方案,但至少在 Qt 中有效:

    QString getBssidOnMac() {
        QStringList arguments;
        arguments << "-I";
        QProcess process;
        process.start("/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport", arguments);
        process.waitForFinished();
        QString outp = process.readAllStandardOutput();
        QRegExp re_bssid(".*(BSSID\\:\\s([0-9a-fA-F]{1,2}(\\:[0-9a-fA-F]{1,2}){5})).*");
        if (re_bssid.indexIn(outp) !=-1) {
            return re_bssid.cap(2);
        }
        else {
            return QString();
        }
    }
    

    【讨论】:

    • 我们需要导入哪些文件和框架,在目标 c 项目中运行此代码
    • 好吧,这段代码是用于 Qt 的,不是为了包含到 Xcode 项目中,而是为了替换它。我建议您找到一种从 ObjC 运行终端命令的方法 - 它将以相同的方式工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多