我有一台装有 Mavericks 的 Mac。众所周知,在 Mac 上,您只能使用“系统偏好设置”中的“Internet 共享”创建 WPA2 安全的 Wi-Fi 网络。命令行上没有预装的、有文档记录的应用程序可以创建基础架构模式网络。
/usr/libexec/airportd 有一个未记录的选项,startHostAPModeWithSSID,可以创建一个临时网络,可选择使用 WEP。
请注意,这只是同名 CoreWLAN 函数的接口,该函数是一个公共框架,并且已记录在案。另请注意,访问 Mac 上的无线硬件的 API 流程如下: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.)
有没有办法通过命令行在 Mac 上创建 WPA2 安全网络?无需承担 NAT、dhcp 等互联网共享的所有开销。
许多其他类似问题都没有得到完整的回答。我尝试查看 Internet 共享偏好设置窗格使用了哪些功能,它使用了一些私有框架:
$ 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 加密,我查看了 Internet 共享偏好设置窗格所依赖的内容。我选择了 launchdaemon 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 和所有不必要的古怪功能。有没有办法仅使用命令行在 Mac 上创建 WPA2 网络?