是否可以从终端在 Mac 上创建 WPA2 安全的基础设施 Wi-FI 网络?

是否可以从终端在 Mac 上创建 WPA2 安全的基础设施 Wi-FI 网络?

我有一台装有 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 网络?

相关内容