更新记录
1.0.0(2026-06-07) 下载此版本
初次提交
平台兼容性
uni-app(5.0)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | √ | 7.0 | 12 | 5.0.0 |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(5.0)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | 7.0 | 12 | 5.0.0 | × |
laoqianjunzi-net
laoqianjunzi-net 是一个面向 uni-app / uni-app x 的网络诊断与地址快照插件,聚焦 5 组当前可直接使用的能力:
- 目标连通性探测
- 本机地址读取
- 网卡快照采集
- 局域网 IPv4 网段扫描
- 诊断日志开关
插件设计目标是让页面层直接拿到结构化结果,而不是自行解析各端零散输出。文档内容聚焦当前正式导出的主 API 与实际平台行为。
适用场景
- 登录前网络自检
- 设置页展示当前 IP / 网卡状态
- 局域网设备发现
- 远端地址可达性验证
- 现场排障与用户自助诊断
能力概览
当前推荐使用的 API 如下:
| API | 说明 |
|---|---|
setTraceVerbosity(level) |
设置插件内部诊断日志级别 |
inspectReachability(options) |
探测目标地址是否可达,并返回时延、丢包、原始诊断文本 |
readLocalAddress(options) |
读取当前设备可用的本机地址信息 |
readAdapterSnapshot(options) |
获取网卡快照列表 |
surveyLan(options) |
扫描当前 IPv4 网段内的在线主机 |
平台支持
插件可编译平台
| 平台 | 状态 |
|---|---|
| Android App | 支持 |
| iOS App | 支持 |
| Harmony App | 支持 |
| Web | 支持部分能力 |
| 微信小程序 | 仅保留导出,核心探测能力不可用 |
按能力划分的支持情况
| 能力 | Android | iOS | Harmony | Web | 微信小程序 |
|---|---|---|---|---|---|
setTraceVerbosity |
支持 | 支持 | 支持 | 支持 | 支持 |
inspectReachability |
支持 | 支持 | 支持 | 支持,但基于 HTTP 请求模拟探测 | 不支持 |
readLocalAddress |
支持 | 支持 | 支持 | 支持,但受浏览器隐私策略影响 | 不支持 |
readAdapterSnapshot |
支持 | 支持 | 支持 | 支持,信息粒度受限 | 不支持 |
surveyLan |
支持 | 支持 | 支持 | 不支持 | 不支持 |
环境要求
HBuilderX:5.07或更高- Android:
minSdkVersion 24 - iOS:
12.0或更高 - Harmony:
5.0.0或更高
安装与引入
如果插件已经位于项目的 uni_modules/laoqianjunzi-net 目录中,页面中直接从插件根目录导入即可:
import {
inspectReachability,
readAdapterSnapshot,
readLocalAddress,
setTraceVerbosity,
surveyLan
} from '@/uni_modules/laoqianjunzi-net'
注意事项:
- 请从
@/uni_modules/laoqianjunzi-net导入,不要直接引用某个平台实现文件。 - 真机能力请优先用自定义基座或正式包验证,尤其是权限、局域网扫描和本机地址读取。
- Web 与小程序存在平台沙箱限制,README 中示例可运行不代表每个平台都能拿到相同粒度的数据。
快速开始
1. 打开调试日志
setTraceVerbosity('debug')
可选值:
off:关闭日志debug:输出详细诊断日志
2. 探测目标是否可达
inspectReachability({
target: 'www.baidu.com',
attempts: 4,
waitTimeout: 3000,
payloadBytes: 32,
success: (result) => {
console.log('reachable', result.reachable)
console.log('avgLatency', result.avgLatency)
console.log('transcript', result.transcript)
},
fail: (error) => {
console.error(error.errCode, error.errMsg, error.detail)
}
})
3. 读取本机地址
readLocalAddress({
preferIpv6: false,
success: (result) => {
console.log('preferredAddress', result.preferredAddress)
console.log('ipv4List', result.ipv4List)
console.log('ipv6List', result.ipv6List)
}
})
4. 读取网卡快照
readAdapterSnapshot({
success: (result) => {
console.log('platform', result.platform)
console.log('adapters', result.adapters)
}
})
5. 扫描当前局域网
surveyLan({
waitTimeout: 600,
hostFrom: 1,
hostTo: 32,
success: (result) => {
console.log('localAddress', result.localAddress)
console.log('discoveredCount', result.discoveredCount)
console.log('nodes', result.nodes)
}
})
API 说明
setTraceVerbosity(level)
设置插件内部日志输出级别。
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
level |
'off' \| 'debug' |
是 | 日志级别 |
使用建议
- 联调阶段可开启
debug - 生产环境建议保持
off
inspectReachability(options)
探测目标连通性,返回是否可达、丢包率、时延统计与原始诊断文本。
请求参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
target |
string |
是 | - | 目标域名、IPv4、IPv6 或可直接请求的 URL |
attempts |
number |
否 | 4 |
探测次数,内部会限制到 1-10 |
waitTimeout |
number |
否 | 3000 |
单次探测超时,单位毫秒,内部会限制到 150-30000 |
payloadBytes |
number |
否 | 32 |
负载字节数,内部会限制到 0-8192 |
success |
(result) => void |
否 | - | 成功回调 |
fail |
(error) => void |
否 | - | 失败回调 |
complete |
(resultOrError) => void |
否 | - | 完成回调 |
返回结果 ReachabilityReport
| 字段 | 类型 | 说明 |
|---|---|---|
target |
string |
原始目标 |
resolvedAddress |
string |
实际解析或探测使用的地址 |
reachable |
boolean |
是否可达 |
packetsSent |
number |
发送次数 |
packetsReceived |
number |
成功次数 |
lossPercent |
number |
丢包率,范围通常为 0-100 |
minLatency |
number |
最小时延,单位毫秒 |
avgLatency |
number |
平均时延,单位毫秒 |
maxLatency |
number |
最大时延,单位毫秒 |
jitter |
number |
时延抖动,单位毫秒 |
elapsedMs |
number |
总耗时 |
platform |
string |
结果来源平台,如 android、ios、harmony、web |
transcript |
string |
原始诊断文本,适合排障展示或上报 |
目标输入约束
以下情况会直接触发参数错误:
- 空字符串
- 含空格、换行
- 含
;、&、|等明显不安全字符
平台差异
- Android:基于系统探测能力,返回结果最接近传统网络诊断工具。
- iOS:IPv4 优先走 ICMP,其他情况可能回退到 TCP 握手探测,因此
payloadBytes不一定在所有目标上生效。 - Harmony:使用原生探测实现,返回结构与 App 端保持一致。
- Web:本质是基于
uni.request的 HTTP 请求探测,不是原生ping,resolvedAddress可能是请求 URL 而非实际 IP。 - 微信小程序:不支持该能力,会进入失败回调。
readLocalAddress(options)
读取当前设备的本机地址快照。
请求参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
preferIpv6 |
boolean |
否 | false |
是否优先返回 IPv6 |
success |
(result) => void |
否 | - | 成功回调 |
fail |
(error) => void |
否 | - | 失败回调 |
complete |
(resultOrError) => void |
否 | - | 完成回调 |
返回结果 LocalAddressReport
| 字段 | 类型 | 说明 |
|---|---|---|
preferredAddress |
string |
根据 preferIpv6 选出的优先地址 |
ipv4 |
string |
优先使用的 IPv4 地址 |
ipv6 |
string |
优先使用的 IPv6 地址 |
ipv4List |
string[] |
当前可见的 IPv4 地址列表 |
ipv6List |
string[] |
当前可见的 IPv6 地址列表 |
adapterName |
string |
优先地址所在网卡名称 |
platform |
string |
结果来源平台 |
结果说明
- 如果
preferredAddress为空,通常表示当前设备没有拿到可用本机地址,或平台隐私策略阻止了枚举。 - Web 端依赖浏览器
RTCPeerConnection/ ICE 候选信息,部分浏览器可能因为 mDNS 混淆、隐私策略或能力关闭而无法返回真实地址。 - 微信小程序不支持本机 IP 枚举。
readAdapterSnapshot(options)
读取网卡快照列表,适合用于诊断页或设备信息页。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
success |
(result) => void |
否 | 成功回调 |
fail |
(error) => void |
否 | 失败回调 |
complete |
(resultOrError) => void |
否 | 完成回调 |
返回结果 AdapterSnapshotReport
| 字段 | 类型 | 说明 |
|---|---|---|
adapters |
AdapterSnapshot[] |
网卡列表 |
platform |
string |
结果来源平台 |
AdapterSnapshot 字段
| 字段 | 类型 | 说明 |
|---|---|---|
name |
string |
网卡名称 |
state |
'active' \| 'inactive' |
当前状态 |
ipv4List |
string[] |
IPv4 地址列表 |
ipv6List |
string[] |
IPv6 地址列表 |
medium |
'wifi' \| 'cellular' \| 'ethernet' \| 'vpn' \| 'loopback' \| 'dummy' \| 'unknown' |
接入介质 |
mobileGeneration |
'' \| '2G' \| '3G' \| '4G' \| '5G' |
蜂窝网络代际 |
wifiName |
string |
Wi-Fi 名称;受平台权限与系统限制影响,可能为空 |
平台差异
- Android / iOS / Harmony:返回真实网卡快照。
- Web:基于
uni.getNetworkType与本机地址推断,字段完整但信息粒度有限,wifiName通常为空。 - 微信小程序:不支持。
surveyLan(options)
扫描当前设备所处的 IPv4 局域网网段,返回发现的在线节点。
请求参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
waitTimeout |
number |
否 | 1200 |
单个地址探测等待时间,单位毫秒,内部会限制到 150-30000 |
hostFrom |
number |
否 | 1 |
起始主机位,内部会限制到 1-254 |
hostTo |
number |
否 | 254 |
结束主机位,内部会限制到 1-254 |
success |
(result) => void |
否 | - | 成功回调 |
fail |
(error) => void |
否 | - | 失败回调 |
complete |
(resultOrError) => void |
否 | - | 完成回调 |
返回结果 LanSurveyReport
| 字段 | 类型 | 说明 |
|---|---|---|
localAddress |
string |
当前扫描所依据的本机 IPv4 地址 |
networkPrefix |
string |
当前扫描网段前缀,如 192.168.1 |
scannedCount |
number |
实际扫描的地址数量 |
discoveredCount |
number |
发现的节点数量 |
nodes |
LanSurveyNode[] |
节点列表 |
platform |
string |
结果来源平台 |
transcript |
string |
原始探测过程文本 |
elapsedMs |
number |
总耗时 |
LanSurveyNode 字段
| 字段 | 类型 | 说明 |
|---|---|---|
ip |
string |
节点 IPv4 地址 |
mac |
string |
节点 MAC 地址,部分平台可能为空 |
reachable |
boolean |
是否确认可达 |
使用建议
- 建议先小范围扫描,例如
1-32、1-64,避免一次性探测整个网段导致页面等待过久。 - 该能力只面向当前 IPv4 网段,不做跨路由段发现。
- 如果当前设备没有可用 IPv4 地址,扫描会失败。
平台差异
- Android:支持局域网扫描,通常能拿到较完整的节点信息。
- iOS:支持局域网扫描,但由于系统沙箱限制,
mac字段通常为空。 - Harmony:支持局域网扫描。
- Web / 微信小程序:平台沙箱限制,不支持该能力。
错误处理
失败回调会返回 NetLabFailure:
| 字段 | 类型 | 说明 |
|---|---|---|
errSubject |
string |
固定为 laoqianjunzi-net |
errCode |
number |
错误码 |
errMsg |
string |
错误摘要 |
detail |
string |
更详细的原始错误信息 |
错误码
| 错误码 | 含义 |
|---|---|
9302001 |
目标地址为空或包含不支持字符 |
9302002 |
连通性探测失败 |
9302003 |
连通性探测超时 |
9302004 |
当前平台不支持该能力 |
9302005 |
本机地址解析失败 |
9302006 |
网卡快照采集失败 |
9302007 |
局域网扫描失败 |
建议:
- 页面展示给用户时使用
errMsg - 排障日志中同时保留
errCode与detail - 如果需要开发期定位,请同时展示结果中的
transcript
权限说明
插件已在模块侧声明所需权限,但业务侧仍应明确理解这些权限的用途,并在真机上完成验证。
Android
涉及权限:
android.permission.INTERNETandroid.permission.ACCESS_NETWORK_STATEandroid.permission.ACCESS_WIFI_STATEandroid.permission.READ_PHONE_STATEandroid.permission.ACCESS_FINE_LOCATIONandroid.permission.ACCESS_COARSE_LOCATIONandroid.permission.NEARBY_WIFI_DEVICES(Android 13+)
说明:
- Wi-Fi 名称、网络介质、部分网络信息在 Android 上通常依赖位置或附近 Wi-Fi 相关授权。
- 若业务不使用相关展示能力,建议在产品与合规层面审慎评估权限申请范围。
iOS
涉及说明项:
NSLocalNetworkUsageDescriptionNSCarrierUsageDescription
说明:
- 局域网扫描需要本地网络访问授权。
- 蜂窝网络代际标识依赖运营商网络信息能力。
- 获取 Wi-Fi 相关信息时,实际结果仍受系统权限、设备状态和 Apple 能力配置影响。
Harmony
涉及权限:
ohos.permission.INTERNETohos.permission.GET_NETWORK_INFOohos.permission.GET_WIFI_INFO
使用建议
- 诊断页可以先调用
readLocalAddress,再调用readAdapterSnapshot与inspectReachability,最后按需触发surveyLan。 - 用户主动点击“开始诊断”时再触发局域网扫描,避免进入页面即执行重操作。
- Web 端建议把
inspectReachability的结果文案解释为“请求连通性检测”,不要直接等同于系统ping。 - 如果你需要现成示例页,可参考
uni_modules/laoqianjunzi-net/pages/index.uvue。
FAQ
1. 为什么 Web 端读不到本机 IP?
这是浏览器安全策略导致的常见现象。插件在 Web 端依赖 RTCPeerConnection / ICE 候选信息推断地址,部分浏览器会用 mDNS 混淆或直接屏蔽本机地址暴露。
2. 为什么局域网扫描结果里有些设备没有 MAC?
不同平台对 ARP、邻居表和网络接口信息的开放程度不同,尤其 iOS 沙箱限制更严格,因此 mac 字段可能为空。
3. 为什么目标明明能打开,但 inspectReachability 仍然失败?
可能原因包括:
- 目标禁止 ICMP 或短连接探测
- Web 端跨域、证书或请求超时导致失败
- 当前网络本身离线
- 域名能解析但目标端口策略不允许当前探测方式
建议结合 transcript 与 detail 一起分析。

收藏人数:
https://gitee.com/laoqianjunzi/laoqianjunzi-net
下载插件并导入HBuilderX
下载示例项目ZIP
赞赏(0)
下载 1149
赞赏 2
下载 12199097
赞赏 1918
赞赏
京公网安备:11010802035340号