日志服务 网络探测各插件所需权限说明

这篇档详细说明了网络探测器在 Android、iOS、Windows、Unity 等平台上所需的权限声明,为开发者提供全面的权限配置参考。

相关产品
日志服务 产品页,含版本规格、价格与购买入口。

二、网络探测插件自身所需权限

权限 说明
android.permission.ACCESS_NETWORK_STATE 获取网络状态信息(如当前网络类型、是否连接等)
android.permission.READ_PHONE_STATE 读取手机状态信息(如设备标识、运营商信息等)
android.permission.INTERNET 访问互联网(执行网络探测请求)
android.permission.CHANGE_NETWORK_STATE 更改网络连接状态
android.permission.WRITE_SETTINGS 写入系统设置

三、App 层额外声明的权限

权限 说明
android.permission.ACCESS_WIFI_STATE 获取 Wi-Fi 网络状态信息

四、CLS Producer SDK 所需权限

权限 说明
android.permission.ACCESS_NETWORK_STATE 获取网络状态信息(与探测插件重复)

五、Android 权限汇总表

完整使用网络探测器功能,总共需要6个权限。

序号 权限 权限类型 说明 特殊要求
1 INTERNET 普通权限 核心权限,用于执行网络探测(Ping、Traceroute 等)和上报数据 无
2 ACCESS_NETWORK_STATE 普通权限 获取当前网络连接状态和类型 无
3 ACCESS_WIFI_STATE 普通权限 获取 Wi-Fi 连接信息 无
4 READ_PHONE_STATE 危险权限 读取设备和运营商信息 Android 6.0+ 需要运行时动态申请
5 CHANGE_NETWORK_STATE 普通权限 更改网络连接状态 无
6 WRITE_SETTINGS 危险权限 写入系统设置 Android 6.0+ 需引导用户到系统设置页面手动授权

AndroidManifest.xml 声明示例

<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <!– 核心网络权限 –> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!– 设备信息读取(危险权限,需运行时申请) –> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!– 网络状态变更 –> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <!– 系统设置写入(危险权限,需引导用户手动授权) –> <uses-permission android:name="android.permission.WRITE_SETTINGS" /></manifest>

注意:READ_PHONE_STATE 和 WRITE_SETTINGS 属于危险权限,在 Android 6.0(API 23)及以上版本需要在运行时动态申请用户授权。

六、iOS 权限声明

iOS 默认允许应用联网,不需要像 Android 一样显式声明 INTERNET 权限。以下按探测场景分为两套配置。

八、权限/能力清单

键 来源 必需性 说明
NSAppTransportSecurity Info.plist 视情况 仅当有 HTTP 明文或非标准 TLS 目标时配置;纯 HTTPS 可不配置

九、Info.plist 示例

仅在需要 ATS 例外时添加。

<key>NSAppTransportSecurity</key><dict> <!– 全局放开不推荐,建议按域名细粒度配置 –> <key>NSAllowsArbitraryLoads</key> <false/> <key>NSExceptionDomains</key> <dict> <key>example.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> </dict> </dict></dict>

十一、权限/能力清单

键 来源 必需性 说明
NSLocalNetworkUsageDescription Info.plist 必需 iOS 14+ 本地网络访问用途说明,触发系统弹窗
NSBonjourServices Info.plist 仅 Bonjour 发现时必需 声明要使用的 Bonjour 服务类型
NSAppTransportSecurity Info.plist 视情况 若走 HTTP 或弱 TLS,仍需 ATS 例外

十二、Info.plist 示例

<key>NSLocalNetworkUsageDescription</key><string>用于发现和探测局域网设备的网络连通性与时延。</string><!– 仅在 Bonjour 场景需要 –><key>NSBonjourServices</key><array> <string>_http._tcp</string> <string>_https._tcp</string> <!– 按实际协议补充 –></array>

十三、可选:读取 Wi-Fi 信息场景(SSID / BSSID)

如果探测逻辑依赖 Wi-Fi 名称等信息,需补充定位权限。

<key>NSLocationWhenInUseUsageDescription</key><string>用于获取当前网络环境信息以辅助网络探测。</string>

注意:该场景涉及定位授权与系统能力约束,需按实际实现确认。

十四、iOS 权限汇总表

模块 来源文件 键/能力 是否必须 触发弹窗 用途说明
网络探测插件 Info.plist NSLocalNetworkUsageDescription 是(局域网) 是 局域网探测
网络探测插件 Info.plist NSBonjourServices 否(Bonjour) 否 局域网服务发现
网络探测插件 Info.plist NSAppTransportSecurity 视情况 否 HTTP/弱 TLS 兼容
App 层 Info.plist NSLocationWhenInUseUsageDescription 否 是 Wi-Fi 信息读取辅助
CLS SDK 无额外声明 默认联网能力 是 否 日志上报/连通性请求

十五、Windows 权限声明

Windows 平台不使用清单式权限声明,权限主要取决于运行时用户权限级别和系统配置。

十六、各模块权限需求

探测模块 权限要求 Socket 类型 说明
Ping(ICMP) ⚠️ 需要管理员权限 SOCK_RAW 创建 RAW Socket 需要管理员权限
TCPPing ✅ 普通用户即可 SOCK_STREAM 使用标准 TCP 连接
HTTP 检测 ✅ 普通用户即可 标准 HTTP 连接 无特殊权限要求
DNS 检测 ✅ 普通用户即可 UDP 标准连接 无特殊权限要求
MTR(ICMP) ⚠️ 需要管理员权限 SOCK_RAW 创建 RAW Socket 需要管理员权限
MTR(TCP/UDP) ⚠️ 需要管理员权限 SOCK_RAW + SIO_RCVALL 需要 RAW IP Socket 和 SIO_RCVALL 权限

管理员权限详细说明

功能 权限要求 说明
创建 RAW Socket 管理员权限 socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)
创建 RAW IP Socket 管理员权限 socket(AF_INET, SOCK_RAW, IPPROTO_IP)
启用 SIO_RCVALL 管理员权限 用于接收所有 IP 包(包括 ICMP Time Exceeded)

权限不足时的错误表现

场景 错误码 说明
Ping 创建 RAW Socket 失败 PERMISSION_DENIED = -4 返回权限拒绝错误码
MTR 启用 SIO_RCVALL 失败 error=10013(WSAEACCES) 日志显示:[mtr] FAILED: SIO_RCVALL failed, error=10013

十七、其他注意事项

注意事项 说明
防火墙设置 某些防火墙(尤其是第三方防火墙)可能会阻止 RAW Socket,即使有管理员权限也需要手动配置放行规则
SQLite 存储 需要确保数据库文件所在目录有写权限,注意 Windows 下的 UAC 权限问题
DLL 部署 需要确保 cls_network_detect.dll、cls_log_sdk.dll、sqlite3.dll 位于可搜索路径,且程序架构一致(建议统一 x64)

十八、无管理员权限的替代方案

如果应用场景无法获取管理员权限,可以采用以下替代方案:

替代方案 说明
使用 TCPPing 替代 Ping TCPPing 使用普通的 SOCK_STREAM 连接,不需要管理员权限
使用 HTTP 检测 标准 HTTP 连接,普通用户即可执行
使用 DNS 检测 UDP 标准连接,普通用户即可执行
放弃 MTR 路由追踪 MTR 功能强依赖 RAW Socket,无法在普通权限下运行

十九、Unity 权限声明

Unity 网络探测器所需的权限与其实际运行的目标平台相关,Unity 本身不引入额外的独立权限体系。具体说明如下:

·Android 平台:Unity 项目构建为 Android 应用时,权限声明与原生 Android 一致,请参考 Android 权限声明。

·iOS 平台:Unity 项目构建为 iOS 应用时,权限声明与原生 iOS 一致,请参考 iOS 权限声明。

·Windows 平台:Unity 项目构建为 Windows 桌面应用时,权限要求与原生 Windows 一致,请参考 Windows 权限声明。

总结:Unity 网络探测器的权限配置无需单独声明,直接参考目标运行环境对应的平台权限配置即可。

20、附录:跨平台权限对比总览

探测功能 Android iOS Windows
Ping(ICMP) INTERNET 默认联网能力 ⚠️ 管理员权限
TCPPing INTERNET 默认联网能力 ✅ 普通用户
HTTP 检测 INTERNET ATS 配置(视情况) ✅ 普通用户
DNS 检测 INTERNET 默认联网能力 ✅ 普通用户
MTR 路由追踪 INTERNET 默认联网能力 ⚠️ 管理员权限
局域网探测 ACCESS_NETWORK_STATE NSLocalNetworkUsageDescription ✅ 普通用户(需防火墙放行)
网络状态获取 ACCESS_NETWORK_STATE / ACCESS_WIFI_STATE 无需额外权限 无需额外权限
数据上报(CLS) INTERNET / ACCESS_NETWORK_STATE 默认联网能力 ✅ 普通用户
赞 (0)
上一篇 5天前
下一篇 5天前