Tengo una Mac con Mavericks. Es un hecho bien conocido que en una Mac, solo puede crear una red Wi-Fi segura WPA2 utilizando Internet Sharing en las Preferencias del Sistema. Ninguna aplicación preinstalada y documentada en la línea de comando puede crear una red en modo infraestructura.
/ usr / libexec / airportd tiene una opción no documentada, startHostAPModeWithSSID que puede crear una red ad-hoc, opcionalmente usando WEP.
Tenga en cuenta que esto es solo una interfaz para una función CoreWLAN del mismo nombre, que es un marco público y está documentado. Además, tenga en cuenta que el flujo de API para acceder al hardware inalámbrico en una Mac es así:userspace program --> CoreWLAN.framework (public) or others --> Apple80211.framework (private, undocumented) --> IO80211Family.kext (kernelspace, private, undocumented, family-type kext: manages all Wi-Fi kexts) --> specific kext inside IO80211Family (could be AirportAtheros40.kext, AirportBrcm4360.kext, AppleAirportBrcm43224.kext, etc.)
¿Hay alguna manera de hacer una red segura WPA2 en una Mac a través de la línea de comando? Sin todos los gastos generales de compartir Internet como NAT, DHCP y otros.
Muchas otras preguntas como esta han sido respondidas de forma incompleta. Traté de ver qué funciones usa el panel de preferencias de uso compartido de Internet, y usa algunos marcos privados:
$ otool -L /System/Library/PreferencePanes/SharingPref.prefPane
/Contents/MacOS/SharingPref
[shortened for legibility]
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Apple80211 (compatibility version 1.0.0, current version 1.0.0)
/System/Library/PrivateFrameworks/PreferencePanesSupport.framework/Versions/A/PreferencePanesSupport (compatibility version 1.0.0, current version 1.0.0)
/System/Library/PrivateFrameworks/CoreWLANKit.framework/Versions/A/CoreWLANKit (compatibility version 1.0.0, current version 1.0.0)
/System/Library/PrivateFrameworks/SystemAdministration.framework/Versions/A/SystemAdministration (compatibility version 1.0.0, current version 1.0.0)
Utiliza una larga lista de marcos públicos como CoreWLAN, pero estos son los marcos privados que utiliza. Sin embargo, ninguno de estos parece manejar nada relacionado con la seguridad WPA2 que se pueda utilizar desde las opciones de uso compartido de Internet.
Para tratar de idear cómo se habilita el cifrado WPA2, analicé de qué depende el panel de preferencias de uso compartido de Internet. Fui por el launchdaemon com.apple.internetsharing.plist. Simplemente llama /usr/libexec/internetsharing
, que no está documentado pero ofrece algo de ayuda:
$ /usr/libexec/internetsharing --help
/usr/libexec/internetsharing: illegal option -- -
Usage: /usr/libexec/internetsharing [-dDnv] [-e EXTIF] [-l LOGFILE] [-p LO] [-P HI] [-c THREADS] [-t TIMEOUT]
ptions: [sic]
-d Enable debugging
-v Enable verbose logging
-6 Disable(Enable) IPv6 on iOS(MacOS)
-e EXTIF External interface name
-l LOGFILE Enable logging to file
-p LO Port forwarding range, LO
-P HI Port forwarding range, HI
-c THREADS max # of worker threads
-t TIMEOUT Idle timeout
[Sí, las "opciones" en realidad es cómo se imprimió en stdout] Parece que puede tener algo que ver con esto después de todo. Lo que no puede exponer directamente, podemos revelarlo de lo que depende. Entonces:
$ otool -L /usr/libexec/internetsharing
/usr/libexec/internetsharing:
/System/Library/PrivateFrameworks/PacketFilter.framework/Versions/A/PacketFilter (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 55456.0.0)
/System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 855.0.0)
/System/Library/Frameworks/CoreWLAN.framework/Versions/A/CoreWLAN (compatibility version 1.0.0, current version 1.0.0)
/System/Library/PrivateFrameworks/EAP8021X.framework/Versions/A/EAP8021X (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1054.0.0)
/System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration (compatibility version 1.0.0, current version 596.12.0)
/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
/usr/lib/libdns_services.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libbsm.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
Como puede ver, utiliza 2 marcos privados: PacketFilter, que probablemente hace lo que esperaría, y EAP8021X. Es probable que este último sea responsable de habilitar WPA2, sin embargo, al ser un marco privado, carece de toda documentación. Tenga en cuenta que /usr/libexec/internetsharing
hace (o llama a los programas que hagan) NAT ( natd
,) dhcp ( bootpd
,) DNS ( named
también conocido como BIND,) ipfw, y muchos otros pequeños bits. Usar /usr/libexec/internetsharing
no es una opción, ya que es quisquilloso y hace NAT, dhcp, dns y todas las cosas funky que no son necesarias. ¿Hay alguna manera de crear una red WPA2 en una Mac usando solo la línea de comando?
fuente