最后更新于:2026年07月

⚠️ 重要声明:本文仅从技术研究角度介绍网络流量分析与反检测的工程原理,帮助读者理解网络安全机制、提升安全防护能力。请在遵守当地法律法规的前提下阅读和应用本文内容。本文不鼓励也不指导任何违反法规的行为。

流量分析与反审查技术
流量分析与反审查技术深度解析

深度包检测(Deep Packet Inspection,DPI)是网络审查和流量识别的核心技术——通过分析数据包的内容、时序、大小等特征,识别出背后的应用协议乃至具体工具。理解 DPI 的工作原理,不仅能帮你更好地评估代理工具的安全性,也能深入理解现代网络安全攻防的底层逻辑。

本文将从技术原理出发,系统介绍 DPI 检测方法、常见代理协议的指纹特征、各协议的反检测能力对比,以及流量伪装与混淆的工程实践。


🧭 DPI 技术总览

什么是 DPI?

PLAINTEXT
┌──────────────────────────────────────────────────────────┐
│           传统检测 vs 深度包检测                         │
│                                                          │
│  传统检测(L2-L4):                                      │
│  - 只看 IP 地址、端口号、协议类型(TCP/UDP)             │
│  - 例:封锁 1.2.3.4:443 的 TCP 连接                     │
│  - 问题:容易通过换 IP/端口绕过                          │
│                                                          │
│  深度包检测(L7+):                                      │
│  - 分析数据包载荷内容                                     │
│  - 识别应用层协议(HTTP/TLS/SSH...)                    │
│  - 识别具体工具(Tor/V2ray/Shadowsocks...)             │
│  - 分析流量模式(时序、大小、方向)                      │
│  - 问题:计算量大,需要高性能设备                         │
└──────────────────────────────────────────────────────────┘

DPI 检测维度

PLAINTEXT
┌──────────────────────────────────────────────────────────┐
│                  DPI 检测维度                            │
│                                                          │
│  1. 载荷特征检测(Payload Signature)                     │
│     ├── 协议握手特征(TLS ClientHello、SSH banner)     │
│     ├── 明文协议关键词(HTTP GET、SOCKS 版本)          │
│     └── 协议格式匹配(固定头部结构)                     │
│                                                          │
│  2. 证书/TLS 指纹                                       │
│     ├── JA3/JA3S 指纹                                    │
│     ├── 证书链分析                                       │
│     ├── SNI 检查                                         │
│     └── ALPN 扩展                                        │
│                                                          │
│  3. 流量模式分析(Traffic Pattern)                       │
│     ├── 数据包大小分布                                   │
│     ├── 请求/响应时序                                    │
│     ├── 连接时长                                         │
│     ├── 流量方向比(上/下行)                           │
│     └── 突发模式(Burst Pattern)                        │
│                                                          │
│  4. 行为特征分析(Behavioral)                           │
│     ├── 连接建立频率                                     │
│     ├── 目标 IP 多样性                                   │
│     └── 域名分布特征                                     │
│                                                          │
│  5. 熵值分析(Entropy)                                  │
│     ├── 负载熵(是否加密、是否压缩)                    │
│     └── 与正常 HTTPS 流量的熵差异                        │
└──────────────────────────────────────────────────────────┘

🔍 第一部分:DPI 检测技术详解

1.1 TLS 指纹识别(JA3/JA3S)

JA3 是什么?

JA3 是 Salesforce 团队提出的一种 TLS 客户端指纹生成方法,通过提取 TLS ClientHello 中的关键信息并做 MD5 哈希,生成一个唯一的指纹值。

PLAINTEXT
JA3 构成字段:

TLS Version,Cipher,Extensions,EllipticCurves,EllipticCurvePointFormats

示例:
771,49195-49199-52393-52392-49196-49200-49162-49172-...,
0-23-65281-10-11-35-16-5-13-51-45-43-21,
29-23-24-25,0

MD5 → 4c74c8a6d4f4e1e5d6a7f8b9c0d1e2f3

不同代理工具的 JA3 指纹特征:

工具JA3 特征检测难度
Chrome 浏览器标准化指纹高(与正常流量相同)
Go 标准库 (xray)独特的 Go 语言 TLS 栈中(容易识别)
Python requestsurllib 特征指纹
curllibcurl 指纹
WireGuard非 TLS,无 JA3低(但有其他特征)
Shadowsocks AEAD非 TLS,纯加密流量高(熵值分析)

JA3S(服务端指纹):

PLAINTEXT
JA3S = MD5(TLS Version + Cipher + Extensions)

通过对比客户端和服务端的 JA3/JA3S,
可以识别出「非正常 HTTPS 服务」:
- 正常网站:服务器 JA3S 与浏览器 JA3 对应
- 代理服务:JA3S 可能很独特(xray/sing-box 的默认配置)

1.2 TLS 证书与 SNI 检测

PLAINTEXT
TLS 握手中的可观测信息:

Client → Server
├── ClientHello
│   ├── TLS Version
│   ├── Cipher Suites
│   ├── Extensions
│   │   ├── server_name (SNI) ← 明文!
│   │   ├── alpn
│   │   ├── ec_point_formats
│   │   └── supported_groups
│   └── Random

Server → Client
├── ServerHello
│   ├── TLS Version
│   ├── Cipher Suite
│   └── Extensions
├── Certificate  ← 明文!
│   ├── 服务器证书
│   ├── 中间证书
│   └── 颁发机构信息
└── ServerKeyExchange (可选)

SNI 检测:

SNI(Server Name Indication)是 TLS 握手中以明文传输的字段,DPI 设备可以直接读取 SNI 来判断你访问的网站。

BASH
# 查看 SNI(使用 Wireshark 或 tshark)
tshark -i eth0 -Y "tls.handshake.extensions_server_name" -T fields \
  -e ip.src -e ip.dst -e tls.handshake.extensions_server_name

# 示例输出:
# 192.168.1.100   1.2.3.4    www.google.com
# 192.168.1.100   5.6.7.8    www.youtube.com

证书检测:

TLS 证书也是明文传输的,DPI 可以:

1.3 流量模式分析(Traffic Pattern Analysis)

即使流量完全加密,DPI 仍然可以通过「流量行为模式」识别代理:

PLAINTEXT
┌──────────────────────────────────────────────────────────┐
│              流量模式特征对比                            │
│                                                          │
│  正常 HTTPS 浏览:                                      │
│  ├── 请求/响应模式明确                                   │
│  ├── 上行小、下行大                                      │
│  ├── 多并发短连接                                        │
│  ├── 数据包大小多样                                      │
│  └── 有明显的空闲期                                      │
│                                                          │
│  代理隧道(Socks/HTTP 代理):                           │
│  ├── 长连接持续传输                                      │
│  ├── 双向流量接近对称                                    │
│  ├── 数据包大小较为均匀                                  │
│  ├── 高并发、持续活跃                                    │
│  └── 周期性心跳包                                        │
│                                                          │
│  Video 流媒体:                                          │
│  ├── 下行远大于上行(10:1 甚至 100:1)                  │
│  ├── 突发式数据传输(缓冲)                             │
│  ├── 长连接、持续有数据                                  │
│  └── 包大小稳定(MTU 附近)                             │
│                                                          │
│  游戏流量:                                              │
│  ├── UDP 为主                                            │
│  ├── 小包高频                                            │
│  ├── 双向接近对称                                        │
│  └── 延迟敏感                                            │
└──────────────────────────────────────────────────────────┘

关键检测指标:

PLAINTEXT
1. 上行/下行流量比
   - 正常浏览:下行 >> 上行(10:1 ~ 100:1)
   - 代理隧道:相对对称(1:1 ~ 3:1)
   - 文件上传:上行 >> 下行

2. 数据包大小分布
   - 正常 HTTPS:分布多样
   - 某些代理:固定包大小(填充策略问题)

3. 连接时长
   - 正常浏览:短连接(几秒到几分钟)
   - 代理隧道:长连接(几小时到几天)

4. 时序特征
   - 正常:请求-响应模式明确
   - 代理:双向同时传输,节奏更均匀

5. 并发连接数
   - 正常用户:几十个并发
   - 代理节点:成千上万的并发

1.4 熵值分析(Entropy Analysis)

熵值衡量数据的「随机程度」。加密数据的熵值接近 8 bit/byte,而明文协议熵值较低。

PLAINTEXT
不同类型流量的熵值:

类型               熵值 (bit/byte)    特征
─────────────────────────────────────────────────
明文 HTTP          4-6                有大量可读字符
压缩数据           6-7.5              较高但有结构
加密数据           7.5-8              接近随机
图像/视频          5-8                视编码方式而定
随机噪声           8.0                完全随机

检测思路:
- 如果流量熵值极高(接近 8),且不是已知的加密协议
- 可能是代理、VPN 或加密隧道
- 但现代 HTTPS 熵值也很高,仅靠熵值无法区分

🔎 第二部分:常见代理协议的指纹特征

2.1 Shadowsocks / ShadowsocksR

PLAINTEXT
Shadowsocks 特征:

优点(抗检测):
✅ 纯加密流量,没有明显的协议头
✅ 默认随机初始化向量,首包不固定
✅ AEAD 加密后熵值高

缺点(可检测):
❌ 没有 TLS,直接 TCP 传输加密数据
❌ 首包大小与协议版本有关(可识别)
❌ 某些版本有固定长度的 IV + 加密长度字段
❌ 无 TLS 握手,容易被熵值 + 无 TLS 特征识别

检测方法:
1. 非标准端口上的高熵值 TCP 流量
2. 首包长度特征匹配(如 0x01 类型 + 地址长度)
3. 与已知 SS 节点 IP 库比对

2.2 V2ray / Xray (VMess/VLESS)

PLAINTEXT
VMess 特征:

优点:
✅ 可通过 TLS 伪装(VMess + TLS)
✅ 协议格式多样,配置灵活
✅ 可配合 WebSocket/HTTP2/gRPC 传输

缺点:
❌ 原生 VMess 有独特的协议结构(可检测)
❌ 默认 Go TLS 栈,JA3 指纹独特
❌ VMess 协议头有固定格式(alterId 等)
❌ VLESS 虽然更简单,但仍有可识别特征

VLESS + Reality 特征(最强反检测):
✅ 使用真实网站证书,证书链正常
✅ uTLS 指纹模拟(Chrome/Firefox)
✅ XHTTP 流控伪装成正常 HTTP
✅ 协议融合度高,难以与正常 HTTPS 区分
❌ Reality 握手仍有微小特征(非标准服务端行为)

2.3 WireGuard

PLAINTEXT
WireGuard 特征:

优点:
✅ 基于 UDP,协议极简
✅ 加密层与载荷整合,无冗余
✅ 内核级实现,性能极高

缺点:
❌ 独特的 UDP 包格式(固定消息类型)
❌ 固定端口 51820(默认)
❌ 握手包大小固定(148 字节 Initiation)
❌ 容易被 DPI 识别为 WireGuard

检测方法:
1. UDP 端口 51820/41820
2. 固定大小的握手包
3. 消息类型(1=Initiation, 2=Response, 3=Cookie, 4=Data)
4. 包结构特征(固定字段位置)

反检测方法:
1. 使用不同端口
2. 流量填充(增加随机长度)
3. 包装在 TLS 内(如 WireGuard over TLS)
4. 使用 obfs4/udp2raw 混淆

2.4 Trojan

PLAINTEXT
Trojan 特征:

核心理念:把代理流量伪装成 HTTPS 网站流量

优点:
✅ 完整的 TLS 握手(与正常网站无异)
✅ 真实网站证书
✅ 前面是正常网站,后面是代理
✅ 基于 HTTP CONNECT 或 WebSocket 路径

缺点:
❌ 需要真实域名和证书
❌ 伪装网站需要看起来合理
❌ 流量模式可能暴露(如访问的网站不匹配)
❌ 如果伪装站被人工检查,可能穿帮

检测难点:
- 不主动连接可疑 IP 的话,很难从纯流量区分
- 需要配合 SNI/证书分析 + 行为模式分析

2.5 Hysteria / TUIC(QUIC 协议)

PLAINTEXT
Hysteria/TUIC 特征:

优点:
✅ 基于 QUIC/UDP,抗丢包能力强
✅ QUIC 本身就是加密协议
✅ 可以伪装成正常 HTTP/3 流量
✅ 连接建立快(0-RTT)

缺点:
❌ QUIC 有独特的连接 ID 格式
❌ 协议版本号可识别
❌ 非标准 QUIC 实现有独特特征
❌ UDP 大量流量可能被限流

检测方法:
1. UDP 高流量 + QUIC 特征
2. 连接 ID 格式分析
3. 与已知 HTTP/3 流量对比

2.6 协议反检测能力对比

协议载荷伪装TLS 指纹流量模式综合评分
VLESS + Reality + uTLS⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐9.5
Trojan + 真实网站⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐9.0
Hysteria2 + 伪装⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐8.5
Shadowsocks AEAD⭐⭐⭐N/A⭐⭐⭐6.5
VMess + TLS⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐7.0
WireGuard 原生⭐⭐N/A⭐⭐5.0
PPTP/L2TP⭐⭐3.0

🛡️ 第三部分:反检测策略与伪装技术

3.1 TLS 指纹模拟(uTLS)

原理: 修改 TLS 客户端握手参数,使其指纹与主流浏览器(Chrome/Firefox/Safari)完全一致。

PLAINTEXT
uTLS 工作原理:

正常 Go TLS:
  Go 内置 TLS 栈 → 独特的 ClientHello → 独特 JA3

uTLS:
  复制浏览器的 TLS 参数 → 相同的 ClientHello → 相同的 JA3

uTLS 支持的指纹:
- Chrome 120
- Firefox 120
- Safari 17
- iOS 17
- Android 13

sing-box 配置 uTLS:

JSON
{
  "outbounds": [
    {
      "type": "vless",
      "tag": "proxy-out",
      "server": "proxy.example.com",
      "server_port": 443,
      "uuid": "your-uuid",
      "tls": {
        "enabled": true,
        "server_name": "proxy.example.com",
        "utls": {
          "enabled": true,
          "fingerprint": "chrome"
        }
      }
    }
  ]
}

Clash Meta 配置 uTLS:

YAML
proxies:
  - name: "Reality-uTLS"
    type: vless
    server: proxy.example.com
    port: 443
    uuid: your-uuid
    tls: true
    servername: proxy.example.com
    client-fingerprint: chrome
    network: tcp

3.2 流量填充(Traffic Padding)

原理: 在数据包中添加随机填充数据,打破固定包大小的特征。

PLAINTEXT
为什么需要填充?

固定包大小的问题:
- 某些代理协议的包大小有规律
- DPI 可以通过包大小分布识别协议
- 例:SS 加密后的包大小有固定偏移

填充策略:
1. 随机长度填充:每次加 0-N 字节随机数据
2. 固定长度填充:填充到固定大小(如 1420 字节)
3. 模拟正常流量:模仿浏览器的包大小分布

配置示例(sing-box):

JSON
{
  "outbounds": [
    {
      "type": "vless",
      "packet_encoding": "xudp",
      "multiplex": {
        "enabled": true,
        "protocol": "h2mux",
        "max_streams": 32,
        "padding": true
      }
    }
  ]
}

3.3 传输层伪装

WebSocket 伪装:

PLAINTEXT
原理:
  代理数据 → 封装成 WebSocket 帧 → 看起来像正常 Web 应用

流程:
  客户端 → TLS 握手 → HTTP Upgrade → WebSocket → 代理数据
  服务端 → 正常网站 → WebSocket 路径 → 代理后端

优势:
✅ 看起来像正常网站的 WebSocket 连接
✅ 可以通过 CDN(Cloudflare)中转
✅ 防火墙难以阻止(WebSocket 是标准 Web 技术)

劣势:
❌ 多一层封装,有性能损耗
❌ 路径选择需要隐蔽(不要用 /v2ray / /ws 这种明显路径)

HTTP/2 伪装:

PLAINTEXT
原理:
  使用 HTTP/2 帧承载代理流量
  与正常 HTTP/2 流量混合

优势:
✅ 协议更标准
✅ 多路复用性能好
✅ 可通过 CDN

劣势:
❌ 实现复杂

gRPC 伪装:

PLAINTEXT
原理:
  代理数据封装在 gRPC 流中
  看起来像 gRPC 微服务通信

优势:
✅ 企业网络中常见,不引人注目
✅ 基于 HTTP/2,性能好
✅ 支持双向流

劣势:
❌ 需要配合 TLS
❌ 路径要合理(/pb.TunnelService/Tunnel)

3.4 域名与证书伪装

选择域名的技巧:

PLAINTEXT
好的伪装域名:
✅ 看起来像正常的技术博客 / 工具站
✅ 有实际内容(不是空站)
✅ 域名注册时间长
✅ 有正常的访问量
✅ Whois 隐私保护

差的伪装域名:
❌ 域名包含 proxy / v2ray / ss 等关键词
❌ 新注册的域名
❌ 没有实际内容的空站
❌ 证书是自签名的
❌ 证书颁发时间很近

证书配置:

PLAINTEXT
推荐配置:
1. 使用 Let's Encrypt 或其他可信 CA
2. 配置完整的证书链
3. 使用通配符证书(*.example.com)
4. 配置 OCSP Stapling
5. 支持 TLS 1.2 和 1.3
6. 合理的加密套件列表(与主流网站一致)

避免:
❌ 自签名证书
❌ 单域名证书只包含一个可疑域名
❌ 过期证书
❌ 使用罕见的加密套件

3.5 Mux 多路复用

PLAINTEXT
多路复用的影响:

优点:
- 减少连接数(多个连接复用一个 TCP 连接)
- 减少 TLS 握手开销
- 连接建立更快

缺点(反检测角度):
- 单连接流量巨大,持续时间长
- 流量模式异常(一条连接承载所有请求)
- 与正常浏览器行为不同(浏览器是多连接)

建议:
- 反检测优先 → 不启用 mux(更接近真实浏览器行为)
- 性能优先 → 启用 mux,但增加被检测风险
- 平衡方案 → 限制单连接复用数量(如 4-8 个)

3.6 服务端混淆面板

PLAINTEXT
伪装网站的重要性:

当有人访问你的代理服务器域名时:
- 没有伪装 → 403 错误 / 连接重置 → 可疑
- 有伪装 → 显示正常网站 → 正常

伪装面板示例:
- 静态博客(Hugo/WordPress)
- 文件下载站
- 图片分享站
- 个人主页
- API 文档站

实现方式(Nginx):

server {
    listen 443 ssl;
    server_name proxy.example.com;

    # 默认返回正常网站
    location / {
        root /var/www/mask-site;
        index index.html;
    }

    # 代理路径(需要隐蔽)
    location /secret-path-xyz {
        proxy_pass http://127.0.0.1:10086;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

🧪 第四部分:流量检测工具与实验

工具推荐

BASH
# 1. Wireshark - 抓包分析
# 最强大的网络协议分析工具
# 可观察 TLS 握手、数据包时序、大小分布

# 2. tshark - 命令行版 Wireshark
apt install tshark

# 提取 TLS SNI
tshark -i eth0 -Y "tls.handshake.type == 1" \
  -T fields -e ip.src -e ip.dst \
  -e tls.handshake.extensions_server_name

# 3. JA3 指纹计算
# GitHub: https://github.com/salesforce/ja3
pip install ja3

# 计算 PCAP 文件中的 JA3
ja3 pcap_file.pcap

# 4. nDPI - 开源 DPI 引擎
# GitHub: https://github.com/ntop/nDPI
# 支持 300+ 协议识别

# 5. Suricata - IDS/IPS 引擎
# 内置协议检测规则
# 可自定义检测规则

自测方法

PLAINTEXT
如何自测你的代理是否容易被检测?

1. 抓包对比法
   - 同时抓包:代理流量 vs 正常浏览器流量
   - 对比 JA3 指纹
   - 对比包大小分布
   - 对比时序模式

2. 端口扫描法
   - 从外部扫描你的服务器端口
   - 看看服务返回什么
   - 与正常网站对比

3. 证书检查法
   - 检查证书是否正常
   - 检查证书链是否完整
   - 检查加密套件是否标准

4. DPI 工具检测法
   - 使用 nDPI / Suricata 检测
   - 看能否识别出你的代理协议

5. 行为模式分析
   - 观察 24 小时流量模式
   - 连接时长分布
   - 上下行比例
   - 与真实用户行为对比

🔮 第五部分:未来趋势

检测技术的发展

PLAINTEXT
┌──────────────────────────────────────────────────────────┐
│              检测技术发展趋势                            │
│                                                          │
│  1. AI / ML 检测                                         │
│     - 机器学习模型识别流量模式                           │
│     - 自动学习正常流量基线                               │
│     - 异常检测准确率提升                                 │
│     - 自适应检测策略                                     │
│                                                          │
│  2. 主动探测(Active Probing)                           │
│     - 主动连接可疑节点,观察响应特征                     │
│     - 发送探测包,分析响应                               │
│     - 比被动 DPI 更准确,但需要主动出击                   │
│                                                          │
│  3. 全流量存储+回溯分析                                   │
│     - 存储所有流量,事后分析                             │
│     - 配合 AI 进行长期行为分析                           │
│     - 存储成本高,但检测准确率高                         │
│                                                          │
│  4. 联邦学习 + 众包检测                                   │
│     - 多节点联合训练检测模型                             │
│     - 共享特征,不共享原始数据                           │
│     - 检测能力快速迭代                                   │
│                                                          │
│  5. ECH(Encrypted Client Hello)                       │
│     - 加密 SNI,保护隐私                                │
│     - 但同时也让 DPI 更难检测                            │
│     - 可能导致更激进的检测手段                           │
└──────────────────────────────────────────────────────────┘

反检测技术的发展

PLAINTEXT
┌──────────────────────────────────────────────────────────┐
│              反检测技术发展趋势                          │
│                                                          │
│  1. 协议融合                                             │
│     - 代理协议与正常协议深度融合                         │
│     - 不是「伪装」而是「复用」                           │
│     - 例:直接在真实网站服务中嵌入代理功能               │
│                                                          │
│  2. 去中心化                                             │
│     - P2P 代理网络                                       │
│     - 没有中心节点,难以封锁                             │
│     - 类似 Tor,但性能更好                               │
│                                                          │
│  3. AI 流量模拟                                          │
│     - 使用 GAN 生成与正常流量一致的包序列               │
│     - 实时调整流量模式                                   │
│     - 自适应反检测                                       │
│                                                          │
│  4. 协议混淆器                                           │
│     - 通用的协议混淆框架                                 │
│     - 可针对不同检测策略切换混淆方案                     │
│     - 类似 obfs4 但更智能                                │
│                                                          │
│  5. 后量子加密                                           │
│     - 抗量子计算攻击的加密算法                           │
│     - 新的密码学原语                                     │
│     - 可能带来新的指纹特征                               │
└──────────────────────────────────────────────────────────┘

📋 反检测最佳实践清单

PLAINTEXT
服务端配置:
□ 使用可信 CA 颁发的证书(Let's Encrypt)
□ 配置完整证书链
□ 启用 TLS 1.3
□ 使用 uTLS 模拟浏览器指纹
□ 启用 WebSocket/gRPC 传输层伪装
□ 配置伪装网站(有真实内容)
□ 使用合理的路径(不要用 /v2ray / /proxy)
□ 监听 443 标准端口
□ 启用流量填充
□ 配置合理的 mux(或关闭)

域名配置:
□ 使用看起来正常的域名
□ 域名有一定历史
□ Whois 隐私保护
□ 域名与伪装网站内容匹配

客户端配置:
□ 使用 uTLS 模拟浏览器
□ 不要使用独特的客户端版本
□ 保持与浏览器一致的行为模式
□ 合理的超时和重连策略

运维建议:
□ 定期更新协议版本
□ 监控服务器行为
□ 避免异常流量模式
□ 定期更换域名/IP(如需要)
□ 多节点分散风险

结语

流量分析与反检测是一场持续的「猫鼠游戏」——检测技术在进步,反检测技术也在演进。理解背后的原理,能帮你做出更明智的技术选型,也能更客观地评估各类方案的安全性。

核心要点回顾:

相关文章:

记住:没有绝对安全的方案,只有相对的检测成本。选择适合自己需求的方案,并持续关注技术发展。

再次提醒:本文仅作技术研究与学习参考,请遵守所在国家和地区的法律法规。

愿你在技术探索的道路上不断进步!🔐

版权声明

作者: 易邦

链接: https://blog.e8k.net/posts/traffic-analysis-anti-censorship/

许可证: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。