Files
Astral/docs/netdelivery说明.md
T
Txiaochen 3e30dffb31 v0版本完成:新增 4 篇详细文档(README 精简内容的落点)
README 为了防冗余做了精简,被移出的详细内容写成文档放这里:

- 功能票使用说明.md      买票/用票的完整原理、报文依据、playCredit 公式、实测记录
- 账号转生说明.md        reincarnate 完整流程、分批规则(避开 2 首)、
                          续关登录依据、登出 type=1 依据、playlog 合成、迁移范围
- 常见坑与注意事项.md    二维码 / 账号状态 / 功能票 / 副作用 / 日志 / 网络 /
                          不入库清单 + .gitignore 行尾注释的坑
- netdelivery说明.md     DLI 协议、amdaemon.exe 字符串出处、用法与实测结论
2026-10-07 11:23:47 +08:00

104 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# netdelivery.py 说明(ALL.Net DLI)
> 本文是 [`README.md`](https://git.fragrance.moe/Txiaochen/wahappy) 里
> netdelivery 部分的**详细版**(含运行原理)。
---
## 一、DLI 是什么
**DLI = Download Instruction(配信指示書)。**
机台做完 ALL.Net 认证后,AMDaemon 会再问一次「我该下什么包」:
```
POST http://at.sys-allnet.cn/net/delivery/instruction
body = title_id=SDGB&title_ver=<版本>&client_id=<Keychip 短值>
→ result=1&uri=<patch 指示書 URL>|<option 指示書 URL>
```
指示書本身是个 INI(日文注释),真正要下的包写在 `INSTALLn=` 里:
```ini
[COMMON] INSTALL1=https://.../SDGB_1.56.00_..._1_1.55.01.app
[OPTIONAL] INSTALL1=https://.../SDGB_A031_..._0.opt
INSTALL2=https://.../SDGB_A005_..._0.opt
```
> ★ 只有 `INSTALLn=` 才是**要下载的包**;
> `EXISTn=` 是「本机应该已经有的文件」,只是文件名,不是下载项。
---
## 二、协议出处
全部来自 `source/amdaemon.exe` 的字符串(数字是文件内偏移):
| 字符串 | 偏移 |
|---|---|
| `http://at.sys-all.cn/net/initialize` | `@0x788170` |
| `http://at.sys-all.cn/net/delivery/instruction` | `@0x788198` |
| `title_id=%s&title_ver=%s&client_id=%s` | `@0x7882b8` |
| `ALWE_NETDELIVER_PHASE_GET_DLINST_INFO` | `@0x63bde0` |
| `ALWE_NETDELIVER_PHASE_APP_IMAGE_INFO` | `@0x63be08` |
| `ALWE_NETDELIVER_PHASE_OPT_IMAGE_INFO` | `@0x63be30` |
| `"Net deliver param - dli uri : %s."` | `@0x63c3f8` |
| `ALE_ABEX_STAT_DLINSTR_OK` / `_ERR_DLINSTR_NG` | `@0x638600` |
| `alAbEx_lite Ver 4.00.01` | `@0x784a31` |
协议是 ALL.Net **alAbEx v4**:AES-128-CBC 信封,明文是 `key=value&...`。
```
请求 = AES-CBC( 16 字节全 0 前缀 || 明文, IV = 全 0 )
响应 = 16 字节 IV || 密文
```
---
## 三、用法
```bash
python netdelivery.py # 用 config.py 里的机台查,然后**多选下载**
python netdelivery.py A63E01ABCDE # 指定 Keychip
python netdelivery.py --list # 只列清单 + 直链,不下载
python netdelivery.py --all # 全下(不交互)
python netdelivery.py --only 1,3 # 只下第 1、3 项(不交互)
python netdelivery.py --ver 1.55 # 指定上报版本(默认 config.MAI_ENCODING)
python netdelivery.py --out D:\SDGB2026\update
python netdelivery.py --insecure # 关掉 TLS 校验(CDN 证书有问题时用)
```
交互选择支持:逗号/空格分隔、区间(`1-3`)、`a`=全选、`n`=全不选、`q`=退出。
下载带**断点续传**(`.part` 临时文件 + `Range`,下完改名)与进度/速率显示。
---
## 四、实测结论(2026-10-06)
| 结论 | 证据 |
|---|---|
| `title_ver` 决定拿哪份指示書 | `1.55` → patch 1.56 + opt A005;`1.56` → 仅 opt A031;`≤1.54` → `uri=null` |
| `client_id` **必须**是 11 位短值 | 发 15 位完整 Keychip → `result=-3`;发小写 → `result=-2` |
| 包可以断点续传 | 返回 `206` + `Content-Range` |
| 已下架的历史包会回 **504** | 这是华立 CDN 的状态,**不是脚本的问题** |
实测清单(`--ver 1.56`):
```
序号 类型 大小 来源段/键 文件名
[ 1] opt 7.25 MB COMMON/INSTALL1 SDGB_A031_20260909101347_0.opt
[ 2] opt 3.00 MB OPTIONAL/INSTALL1 SDGB_A005_20260610180958_0.opt
```
下载并校验字节数完全一致:`SDGB_A031...opt` = 7602176、`SDGB_A005...opt` = 3145728。
---
## 五、注意
- 默认下载到 `download/`(已加入 `.gitignore`,`.app` 动辄上 GB)。
- 需要同目录下的 `authv1.py` 提供 ALL.Net 协议层。
- 这是**只读**操作,不写任何账号数据。