Показать все доступные соединения 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]