Показать все доступные соединения WIFI с Swift в OS X

Я пытаюсь отобразить все доступные соединения WIFI. Не работает Вот мой код:

import Foundation
import CoreWLAN

var cwInterface = CWInterface()

do {
    let routers = try cwInterface.scanForNetworksWithSSID(nil)
    print(routers)
} catch let error as NSError {
    print("Error: \(error.localizedDescription)")
}

Я не получаю никакого результата. Что я делаю не так?

1 ответ

Решение

Это работает, если вы инициализируете CWInterface с именем интерфейса, например, "en1".

Но лучше не использовать зашифрованные имена, поэтому мы также будем использовать CWWiFiClient.sharedWiFiClient().interface() который возвращает интерфейс WIFI по умолчанию.

Пример класса для управления всем этим:

class Discovery {

    var currentInterface: CWInterface
    var interfacesNames: [String] = []
    var networks: Set<CWNetwork> = []

    // Failable init using default interface
    init?() {
        if let defaultInterface = CWWiFiClient.sharedWiFiClient().interface(),
               name = defaultInterface.interfaceName {
            self.currentInterface = defaultInterface
            self.interfacesNames.append(name)
            self.findNetworks()
        } else {
            return nil
        }
    }

    // Init with the literal interface name, like "en1"
    init(interfaceWithName name: String) {
        self.currentInterface = CWInterface(interfaceName: name)
        self.interfacesNames.append(name)
        self.findNetworks()
    }

    // Fetch detectable WIFI networks
   func findNetworks() {
        do {
            self.networks = try currentInterface.scanForNetworksWithSSID(nil)
        } catch let error as NSError {
            print("Error: \(error.localizedDescription)")
        }
    }

}

Назовите это с интерфейсом по умолчанию:

if let discovery = Discovery() {
    print(discovery.networks)
    for network in discovery.networks {
        print(network.ssid!)
    }
}

Или с именем интерфейса:

let discovery = Discovery(interfaceWithName: "en1")
let results = discovery.networks

Результаты содержат все отсканированные сети:

[<CWNetwork: 0x608000001bd0> [ssid=SomeNetworkName, bssid=xxxx, security=WPA Enterprise, rssi=xx, channel=<CWChannel: 0x600000004fb0> [channelNumber=11(2GHz), channelWidth={20MHz}], ibss=0], etc]

Другие вопросы по тегам