协议控制与 IP 控制:把弱网精确到 TCP/UDP/DNS/ICMP 和指定地址
默认情况下弱网对全部流量生效。但不少测试问题需要「只坏某一种协议」或「只坏某台服务器」——比如验证 DNS 解析失败的降级、只对游戏服务器注入延迟。QNET 提供协议与 IP 两层过滤,2.0 起全面支持。
协议控制:四种协议按位或
协议控制支持 TCP、UDP、DNS、ICMP 四种协议的分别控制,编号为 1、2、4、8,多选时按位或相加:
| 值 | 含义 |
|---|---|
| 1 | 仅 TCP |
| 2 | 仅 UDP |
| 4 | 仅 DNS |
| 8 | 仅 ICMP |
| 3 | TCP + UDP |
| 15 | 全部协议(默认值) |
模板编辑页提示里的「弱网控制协议 TCP:1.UDP:2.ALL:3」指的就是这套编号。全部协议的默认值 15 = 1+2+4+8。
按协议分层的实战场景
- 仅 DNS(4):模拟 DNS 解析失败/劫持,验证应用的备用解析与提示,这是网络排查里最经典的一刀;
- 仅 UDP(2):打掉实时音视频与游戏对局(多用 UDP),让 HTTP 页面保持正常,定位「卡顿到底是网页还是连线」;
- 仅 TCP(1):拖慢/打断 API 请求,观察业务层重试;
- 含 ICMP(8):连 ping 都断掉,验证应用的连通性探测是否误判。
IP 控制:多地址竖线分隔
IP 列表参数可以指定弱网只对目标 IP 生效,多个 IP 用竖线「|」分隔;留空表示全局生效。典型用法:
- 从被测应用的实际请求里拿到服务器 IP(抓包可得,见pcap 文件与 Wireshark 分析);
- 填入 IP 列表,其余流量不受影响;
- 组合「仅 UDP + 游戏服务器 IP」就能精确复现「只有对战卡」的用户反馈。
adb 里的对应键值
协议控制在指令行是 protocol 参数,IP 过滤是 ip_list 参数,类型均为 int/字符串,完整取值见adb 参数速查表;指令组合示例见动态更新弱网参数。
分层过滤的价值在于「控制变量」:一次只坏一层,问题定位才不会发散。