Eu tenho um Mac com o Mavericks. É um fato bem conhecido que, em um Mac, você só pode criar uma rede Wi-Fi protegida por WPA2 usando o Compartilhamento de Internet nas Preferências do Sistema. Nenhum aplicativo pré-instalado e documentado na linha de comando pode criar uma rede no modo de infra-estrutura.
/ usr / libexec / airportd tem uma opção não documentada, startHostAPModeWithSSID, que pode criar uma rede ad-hoc, opcionalmente usando WEP.
Observe que essa é apenas uma interface para uma função CoreWLAN com o mesmo nome, que é uma estrutura pública e está documentada. Além disso, observe que o fluxo de APIs para acessar o hardware sem fio em um mac é assim: 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.)
Existe uma maneira de fazer uma rede segura WPA2 em um Mac através da linha de comando? Sem toda a sobrecarga de compartilhamento de internet como NAT, DHCP e outros.
Muitas outras perguntas como essa foram respondidas de maneira incompleta. Tentei ver quais funções o painel de preferências de compartilhamento da Internet usa e ele usa alguns frameworks 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)
Ele usa uma longa lista de estruturas públicas como o CoreWLAN, mas estas são as estruturas privadas que ele utiliza. No entanto, nenhum deles parece lidar com qualquer coisa relacionada à segurança WPA2 que pode ser utilizada a partir das opções de compartilhamento da Internet.
Para tentar conceber como a criptografia WPA2 está ativada, observei o que o painel de preferências de compartilhamento da Internet depende. Eu fui para o launchdaemon com.apple.internetsharing.plist. Apenas chama /usr/libexec/internetsharing
, que não está documentado mas oferece alguma ajuda:
$ /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
[Sim, as "pções" são na verdade como foram impressas para stdout] Parece que pode ter algo a ver com isso afinal. O que não pode expor diretamente, podemos revelar de que depende. Então:
$ 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 você pode ver, ele usa 2 estruturas privadas: o PacketFilter, que provavelmente faz o que você espera, e o EAP8021X. Este último é provavelmente responsável por habilitar o WPA2; no entanto, sendo um framework privado, ele é desprovido de qualquer documentação. Observe que /usr/libexec/internetsharing
faz (ou chama os programas para fazer) NAT ( natd
,) dhcp ( bootpd
,) DNS ( named
a.k.a BIND,) ipfw e muitos outros pequenos bits. O uso de /usr/libexec/internetsharing
não é uma opção, já que é complexo e faz NAT, dhcp, dns e todas as coisas divertidas que não são necessárias. Existe uma maneira de criar uma rede WPA2 em um mac usando apenas a linha de comando?