逆向了联通官方测速系统的前端代码,发现四重作弊机制,难怪永远"达标"

3 月 27 日
 windmano

各位 V 友好,最近闲着没事逆向了某省联通的官方宽带测速平台(就是装维上门给你"测速达标"签字那个),结果越看越上头。

分享一下发现,代码层面的东西,没有主观臆测。

TL;DR

联通测速系统的算法里埋了四个机制,叠加效果就是:不管你实际网速多少,测出来几乎必定"达标"。

0x01 先说合理的部分

公平起见,算法里有几个设计是业界通用的,没毛病:

这些没问题。问题在后面。

0x02 校正因子:所有结果 ×1.04

speed = downloadVal / elapsed * 1000 * 1.04   // 下载
speed = uploadedSize / elapsed * 1.048         // 上传

计算完实际速度后,下载乘 1.04 ,上传乘 1.048 。

官方可能会说"补偿 TCP/IP 协议开销"。但 TCP header 20 bytes + IP header 20 bytes ,在 MTU 1500 的帧里占比约 2.7%。HTTP header 在持续流式传输大文件时占比可忽略。

4~5% 的"校正"显然超出了协议开销的范畴。 而且方向只往上调,从不往下。

0x03 数据修剪:只砍低的,高的全留

测速过程中每 200ms 采样一次,20 秒下来大约 90 条有效记录。然后:

records.sort((a, b) => a - b);
records = records.slice(5 * minLostDataTime);  // minLostDataTime=3, 砍掉最低 15 条
// 最高的呢?不动。

任何一本统计学教材都会告诉你,处理异常值要双边修剪或者用中位数。只砍低不砍高,这不叫数据清洗,这叫 cherry-picking 。

0x04 高位平均替换:波动大?用峰值覆盖

这段逻辑比较阴间:

topAvg = 取最高 10 条记录的平均值
totalAvg = 全部记录的平均值

if (totalAvg < topAvg * 0.96) {
    // "平均值不够高" → 全部替换为峰值附近的随机数
    records.forEach((val, i) => {
        records[i] = topAvg * random(0.99, 1.0);
    });
}

意思是:如果你的网速有波动(平均值低于峰值的 96%),那实际测量数据全部丢弃,替换为 峰值 × random(0.99, 1.0)

现实中的网络环境哪有不波动的?所以这段代码大概率每次都会触发。效果就是:最终上报的数据全是接近峰值的假数据

0x05 WiFi 补偿:没跑到?帮你补上

这是最炸裂的一段。

服务端下发了这么几个参数:

参数 含义
wifiLossRate 0.6 最多补偿签约带宽的 60%
wifiMaxLossValue 600 单次最多加 600 Mb/s
standardValue 0.9 低于签约 90% 就触发
if (measured < bandwidth * 0.9 && measured > bandwidth * 0.1) {
    gap = ceil((bandwidth * 0.9 - measured) / bandwidth * 100);
    compensation = min(gap / 100, 0.6) * bandwidth;
    compensation = min(compensation, 600);
    speed += compensation * 1000 * 125;  // 直接加到速度上
}

来,算一笔账:

签约 2000M ,实测 1200 Mb/s

gap = ⌈(1800 - 1200) / 2000 × 100⌉ = 30

compensation = min(0.3, 0.6) × 2000 = 600 Mb/s

上报 = 1200 + 600 = 1800 Mb/s → 达标

实际呢?只有 1200 。

注意,补偿参数是服务端控制的,也就是说运营商可以随时调整这个"作弊力度"。想让达标率高一点?把 wifiLossRate 调大就行了。

0x06 四重 buff 叠满

层级 机制 效果
Layer 1 ×1.04 校正因子 基础膨胀 4%
Layer 2 只删低值 拉高均值
Layer 3 峰值替换 消灭波动,锁定高位
Layer 4 WiFi 补偿 +600M 兜底,不达标也给你补到达标

这四层从下到上,覆盖了从"轻微美化"到"明目张胆造假"的完整光谱。你的宽带在这套系统面前,想不达标都难。

0x07 一些额外发现

0x08 我的验证

用 Python 复现了完整测速流程,保留合理部分(多线程、预热),去掉四个作弊机制。

同一条 2000M 宽带:

官方系统 去掉修正
下行 "达标" ~1400 Mb/s
上行 "达标" ~365 Mb/s

1400/2000 = 70%,实际并不达标。但在官方系统里,WiFi 补偿一加,峰值一替换,妥妥的"达标"。

最后

我不反对运营商考虑 WiFi 衰减的因素。但正确的做法是在报告里注明"有线/无线"测试环境和修正说明,而不是在算法里偷偷加数据,给用户一份失真的报告,然后让装维拿着这份报告让你签"速率达标确认单"。

校正因子可以商榷,但 WiFi 补偿和峰值替换就是纯粹的造假,没有任何技术合理性。

用户买的是带宽,不是一份永远达标的测速报告。


以上分析基于前端 JS 逆向,所有结论可从源码直接验证。代码已脱敏,有兴趣的同学可以自己抓包看看。

技术讨论欢迎,键政免入。

7411 次点击
所在节点    宽带症候群
47 条回复
lyz2754509784
3 月 27 日
有没有逆向过江苏联通的测速网站 https://jsspeedtestwebv4.js165.com:8091/h5/broadband.html
装维上门测速应该也是用的这个,也就是所谓的测速正常…目前江苏联通宽带只有这个网站和全球网测的江苏南京联通节点是可以正常测到合同标称的宽带的,其余所有网站/节点上行都只有 2-3m ,有的软件可能有 5m ,包括微信发文件类的实际使用也限制在 500kb/s 左右…更离谱的是 iPhone14pro 用这个网站能跑出物理设备上限的速度来
windmano
3 月 27 日
@lyz2754509784 每个地区的测试网址应该是隔离的,我看了一下你这个测速网址只有江苏的 IP 可以打开
Cert
3 月 27 日
太可怕了……

所以我都是用

https://h3.speed.cloudflare.com/

这个测速站。虽然测出来结果不会很好看,但是至少真实。我们办宽带是为了访问内容,所以从 CDN 入口反馈速度会比较接近真实打开网页的情况。
而国标的宽带标准,也只测到达运营商 BARS 的速度,其实非常的片面。
Cert
3 月 27 日
再为大家推荐一个 Fastly 的测速站,Fastly 也是国际知名的 CDN ,也是很多网站都在用。

https://v6.fastly-debug.com/
kanezeng
3 月 27 日
倒是没有想过还能这么搞啊,不过一直都直接用 speedtest.net ,虽然只能连上海联通的测试点了,不过结果倒都是超标的,看来联通也是看地区,北京联通目前还行,不知道未来如何了。
wdv2ly
3 月 27 日
符合联通一贯作风
kkwa56188
3 月 27 日
触目惊心!
不过一定有 v 友轻描淡写的说没什么, 并且找一些不痛不痛的理由.
YGBlvcAK
3 月 27 日
全球网测有补偿吗?
Aruforce
3 月 27 日
是否可以主张不认同他们的测速软件?
my2492
3 月 27 日
作弊最很的还得华为花瓣测速,千兆口真能测出千兆,别人都是 930-940
Vesc
3 月 27 日
畜生啊😡
stinkytofux
3 月 27 日
运营商现在的限速太恶心了, 完全就是白名单机制.
winterx
3 月 27 日
我一般都是用中科大测速
LxnChan
3 月 27 日
你法我笑.jpg

想不到都 2026 年了还有人在纠结这个,注意一下通信业务是国家专营,是寡头垄断行业。就算他明天说宽带测速能达到 20%就算达标你又能怎么样呢,不过是想体面一点罢了。
qwvy2g
3 月 27 日
就这还有人说商宽补贴家宽,补贴同一个产品至少质量不能差太多吧,可是现在商宽和家宽差距大的和基本上就是两个产品。此外如果家宽想提升质量为什么是办理商宽,而不是提供一个价格稍高,但是质量和商宽一样的家宽,这才叫补贴。
chqome
3 月 27 日
有一个 boce.com/speed 也可以测速
yinmin
3 月 27 日
测速网站测 500Mbps 以上基本都测不准。真正测速的方式是:多开几个测速网站同时测速把带宽拉满,然后到任务管理器里看网卡的流量值
knightdf
3 月 27 日
火钳刘明
fstab
3 月 27 日
我记得我最早使用宽带的时候,好像是 09 年,联通 30 元 4M 单宽带,还是个小黑盒子,网线接入。
到了 11 年,升级到了融合套餐 41 元,卡的通话和流量忽略不计,宽带 20M ,继续用着小黑盒子。

然后 18 年成家后,刚好是竞争的高峰期,移动推出了 18 元、38 保底送宽带和 IPTV ,宽带 50M ,58 元好像是 100M 。
电信 58-59 元保底融合,联通和电信差不多价格,也是保底融合,宽带 100M 。保底融合套餐基本能满足一家三口的需求。

时间到了 20 年,三大运营商响应国家政策,不论资费、宽带低于 100M 的,免费升级到 100M ,
那个时候,我的移动宽带从 50M ,免费升级到 100M ,上下行从 50M 对等变成 100M 对等。

20 年过后,能看到宽带从最低的 100M ,变成了 300M ,但是资费并没有增加,而且因为竞争激烈,携号转网等原因,资费还有一些下降的情况。

22 年左右,各地营业厅开始宣传 1000 兆宽带,资费有部分提升,但是提升也不明显,而且对于普通家庭用户的提升感知并不明显,导致高价值套餐并没有太多人去办理,只能通过哄骗的方式,比如免费体验几个月,但是随之带来的是投诉退费,转网,退网。然后又陷入了降价竞争的局面。

直到 25 年之前,都一直陷入这个局面,25 年开始,移动、电信开始想办法追求利润,不对套餐进行过度打折做竞争,但是联通因为用户量少,还在通过套餐打折的形式来做竞争。

26 年,竞合开始,现在三大运营商开始都不打折了。

我能回忆的时间线大概就是这样子,历史的宽带价值来看,

从政策角度:我觉得提速降费这个政策是真正意义上的落地。
我的角度:从以前联通在市区医院内都出现无信号的情况,到现在乡村都能保持 4G 满信号,镇及以上能保持 5G 信号,说明运营商的基础建设中,也是投入了大量的人力物力,而且我是真正得到了实惠,现在的套餐比之前 09 年还要便宜,量大管饱,并且能满足一家五口,三代人的需求。
从运营商角度:完成了国家交代的任务,但是舍弃了巨额利润,如果国企的利润是给国家的,所以相当于国家少赚钱了。

矛盾点:
用户:办理的宽带,我想怎么用为什么要受运营商管理和约束。
运营商:这点钱,很难办啊。
国资委:运营商赚钱能力越来越弱了,一群饭桶。
fstab
3 月 27 日
宽带测速,我推荐一个软件,电脑管家的宽带测速功能,比较准确。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/1201463

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX