1

У меня есть Mac с Mavericks. Общеизвестно, что на Mac вы можете создать защищенную WPA2 сеть Wi-Fi, используя общий доступ к Интернету в Системных настройках. Ни одно предустановленное, документированное приложение в командной строке не может создать сеть в режиме инфраструктуры.

В /usr /libexec /airportd есть недокументированная опция startHostAPModeWithSSID, которая может создать специальную сеть, необязательно используя WEP.

Обратите внимание, что это просто интерфейс с функцией CoreWLAN с тем же именем, которая является общедоступной структурой и задокументирована. Также обратите внимание, что поток API для доступа к беспроводному оборудованию на компьютере Mac выглядит следующим образом: 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.)

Есть ли способ создать защищенную сеть WPA2 на Mac через командную строку? Без всех накладных расходов на совместное использование интернета, таких как NAT, DHCP и другие.

На многие другие подобные вопросы ответили не полностью. Я попытался увидеть, какие функции использует панель настроек общего доступа к Интернету, и она использует несколько частных платформ:

 $ 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)

Он использует длинный список общедоступных сред, таких как CoreWLAN, но это частные средства, которые он использует. Однако ни один из них, по-видимому, не обрабатывает ничего, связанного с безопасностью WPA2, которое можно использовать в настройках общего доступа к Интернету.

Чтобы попытаться придумать, как включить шифрование WPA2, я посмотрел, от чего зависит панель настроек общего доступа в Интернет. Я пошел для запуска демона com.apple.internetsharing.plist. Он просто вызывает /usr/libexec/internetsharing , который недокументирован, но предлагает некоторую помощь:

$ /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

[Да, на самом деле "ptions" - это то, как оно было напечатано на stdout]. Кажется, что это как-то связано с этим. То, что оно может не раскрывать напрямую, мы можем выявить по тому, от чего оно зависит. Так:

$ 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)

Как вы можете видеть, он использует 2 частные платформы: PacketFilter, который, вероятно, выполняет то, что вы ожидаете, и EAP8021X. Последний, вероятно, отвечает за включение WPA2, однако, будучи частной платформой, он лишен какой-либо документации. Обратите внимание, что /usr/libexec/internetsharing делает (или вызывает программы для выполнения) NAT (natd ,) dhcp (bootpd ,) DNS (named также BIND,) ipfw и многие другие маленькие кусочки. Использование /usr/libexec/internetsharing не является опцией, так как это привередливый и делает NAT, dhcp, dns и все лишние вещи, которые не нужны. Есть ли способ создать сеть WPA2 на Mac с использованием только командной строки?

0