1 votos

¿Cómo reemplazar la funcionalidad de la aplicación de línea de comandos `airport` obsoleta?

Soy el autor de la gema Ruby wifi-wand y la aplicación de línea de comandos que informa y modifica la información de la red wifi en Mac (https://github.com/keithrbennett/wifiwand). La utilidad airport en la que muchas de las órdenes de wifi-wand se basan ahora está obsoleta (a partir de Sonoma 14.4 o algo así, creo), y ya no proporciona ninguna funcionalidad. (Como nota al margen, ¿es común reportar la obsolescencia y eliminar la funcionalidad en la misma versión? Esto me tomó por sorpresa y deshabilitó la funcionalidad en la que los usuarios confían. ¿O me perdí algo?)

¿Puedes ayudarme a encontrar alternativas que se puedan ejecutar desde un programa de línea de comandos, es decir, no aplicaciones GUI, que puedan ofrecer la siguiente funcionalidad que proporcionaba airport?:

  • listar los nombres de las redes wifi disponibles
  • listar los detalles de las redes wifi disponibles
  • desconectarse de la red actualmente conectada (sin apagar el wifi)

EDIT: Anteriormente incluí los 2 siguientes en la lista anterior, pero encontré opciones en networksetup que funcionaron:

  • informar el nombre de la red wifi actualmente conectada
  • informar si el wifi está actualmente encendido o no

Preferiría no tener que usar sudo para ejecutar ninguno de estos; wifi-wand se utiliza en scripts y como una biblioteca a la que pueden acceder otras aplicaciones.

Además, pedir a los usuarios que instalen otra utilidad (por ejemplo, a través de brew) no es ideal, pero sería preferible a nada en absoluto.

1voto

Igor Krivokon Puntos 6999

Hice más investigaciones y la solución más simple que encontré fue usar Swift para acceder a CoreWLAN y así proporcionar la funcionalidad necesaria, es decir:

  • listar los nombres de las redes wifi disponibles
  • desconectarse de la red actualmente conectada (sin apagar el wifi)

Desafortunadamente, CoreWLAN solo está disponible para sistemas en los que se ha instalado XCode. Estuve tentado de reemplazar todas las tareas con Swift, para no tener que analizar la salida de texto en aplicaciones de línea de comandos (tanto por simplicidad como por fiabilidad, ya que analizar este texto no es 100% infalible), pero decidí (por ahora al menos) dejar tanto como sea posible como está para que aquellos sin XCode aún pudieran usar la mayor parte de la funcionalidad de la aplicación.

Aquí están los programas Swift que estoy usando actualmente:

AvailableWifiNetworkLister.swift

import Foundation
import CoreWLAN

class NetworkScanner {
    var currentInterface: CWInterface

    init?() {
        // Initialize with the default Wi-Fi interface
        guard let defaultInterface = CWWiFiClient.shared().interface(),
              defaultInterface.interfaceName != nil else {
            return nil
        }
        self.currentInterface = defaultInterface
        self.scanForNetworks()
    }

    func scanForNetworks() {
        do {
            let networks = try currentInterface.scanForNetworks(withName: nil)
            for network in networks {
                print("\(network.ssid ?? "Unknown")")
            }
        } catch let error as NSError {
            print("Error: \(error.localizedDescription)")
        }
    }
}

NetworkScanner()

WifiNetworkDisconecter.swift

import Foundation
import CoreWLAN

if let wifiInterface = CWWiFiClient.shared().interface() {
    wifiInterface.disassociate()
    print("ok")
} else {
    print("error")
}

El código Ruby que procesa estas respectivas salidas es:

  def run_swift_command(basename)
    swift_filespec = File.join(
      File.dirname(__FILE__), "../../../swift/#{basename}.swift"
    )
    command = "swift #{swift_filespec}"
    `#{command}`
  end
# ...
    run_swift_command('AvailableWifiNetworkLister').split("\n")
# ...
    run_swift_command('WifiNetworkDisconecter')
# ...

0voto

gh0st Puntos 43

Un subconjunto limitado de la funcionalidad está disponible a través de las herramientas CL wdutil y networksetup, pero especialmente escanear parece que ya no es fácilmente posible a través de la línea de comandos.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X