TD线上的“缓冲区溢出攻击”

(本文写作时间跨度为12、13日)

对TD线本学期新政策的批评,附照片。照片未压缩,谨慎浏览。


新学期的TD政策:大一到大三有一门0.1学分的体育必修课,内容为本学期刷48次TD。大四原有12分钟跑,所以可以在二者中选择一个,无论是刷满了还是跑过了都算过。TD线路的具体路线,沙河那边是游泳馆一个点(A),操场两个点(A-B),原有TD线两个点(A-B),本部这边是原有TD线两个点(A-B),操场两个点(A-B-A)。有早中晚三个时段,分别是06:40-07:40,12:30-14:30,17:10-18:30。

由于原本刷TD只是体育加分政策的一环(刷满40次总分加10分),而这个学期突然就变成了必修,许多人措手不及。从试运行的两天(8日、9日)来看,操场人还是比较少的,每个刷卡点排上两三分钟的队就可以了。传统TD线人倒是很多,TD最后要从一个台子上滑杆下来或者爬梯子下来,下面是一个4×4左右的缓冲区,刷卡的B点就在这里——靠墙放置的刷卡机已经被淹没,缓冲区里几乎都是人(实际上人只占了70%的可用空间,居然不会去优化),甚至一些人还不能从高台上下来。

但是随着正式计算时间的开始,操场的人数呈现指数增长的态势。

今天下午五点十分开始的时候过去刷,大概30米长(×2,两个点),后来是35米(×2),走的时候(33分)时40米。还好去得早,晚一点又碰上高峰;六点半前据同学报告“别想刷卡了”。

通知上结尾处是这么说的:

一天三次的锻炼开放时间,每次锻炼时间刷卡有且只能有一次,这就意味着你连续16个工作日,3周+1天就可以获得学分,这不比考试容易得多吗?不要因为排队就不开心,在中国哪有不等待的事情,但是请同学们放心,我们会尽快地减少排队等待时间。

另机器少的原因,主要是供应商的供货价格偏高。所以希望我们北航的有志青年……一是提出宝贵改革建议,二是创造我们自主研发的产品,降低成本……

(注:对原文虚词、标点误用和语法错误做了修正)

好了,“不要因为排队就不开心”,可是我每次排队都不开心。13日的时候我算了一下,排一个队的大概有110-120人。现在那个机器是什么情况呢?上一个同学刷卡成功后,它发出声音“刷卡成功”并停留显示两秒;上一个此时走开,下一个过来,卡放在感应区、面部对着摄像头(理论上要记录打卡时的照片)也要等两秒多才能识别并切换到报告;如果校园卡信息读取失败则需要手工输入学号。

刷卡的问题找到了~旧卡读出的数据是十进制,新卡读出的数据是疑似十六进制~完成之前的算法不可用!如果办卡那里给不出好的解决方法,持新卡的人不太多,考虑到经济问题,可能就不会改算法了!所以叫同学们暂且输学号,哪天发现能刷卡就刷卡~

我们就少吐槽学校的任务交付出了多少问题了。在此之前发消息的人你确定不是 BCD 编码和 HEX 编码的问题么,说什么十进制十六进制……

好了上面有点偏题。这里我们来看一下这个“排队”会排多久吧。按照120人计算,假设一人刷一次(没有代刷),每个人是完全理性的,所用时间4.5秒(几乎是极限),那么站在120人的队伍最后的我排这个队需要

120 ÷ (60 ÷ 4.5) = 9 (分钟)

当然,我在这三天遇到了超过5个代刷的,而且人的移动并不是很理性。再加上跑/走800米所需的时间,在操场每次刷TD需要超过30分钟。(至于原TD线的数据如何,本学期没去过原TD线路所以不清楚,不过机器的速度是差不多的。)对比一下之前提到的开放时间数据,你就知道有多少人能幸运地刷上了。另外,谁不想一天刷至少两次呢?于是平均一天就花了超过一个小时在这TD上。

另外,每个时间段按照开放一个半小时计算,假设TD终点、操场两个点一共3个点都最大化效率地利用了,理论上最多能容纳多少人呢?

3 × 1.5 × 3600 ÷ 4.5 = 3600 (人)

3600人什么概念?略多于北航一届本科生人数。自己想一想,大三100%需要刷TD,大四由于有第二选项12分钟跑,假设有10%的人因不想忍受12分钟跑而来刷。那么这个容纳量刚刚好,在理论条件下。当然,由于一共就4台机器,每台机器每个时间段都要受到1200人的蹂躏,看这质量能撑多久。

13日中午,我12:30到操场A点,第二次刷A点的时候已经过了13:00,于是13:07得以才出操场。午睡就泡汤了。同时,A点机器在第二次刷的时候已经通信失败了,说是先刷卡将数据存在机器里,修复后上传。

看着旁边TD线B点,高台上还站着人,我的第一感觉就是:缓冲区溢出啦!输入超过处理能力啦!

所以,学校那些批下这个强制刷TD政策的人,你也许用心是好的,但是能不要拍脑袋吗?或许,做出这个决定的人根本不用来刷呢。


13日下午,17:30左右的补充照片,让你们见识一下TD长龙。

TD线A点前

操场B点,围栏外视角

操场B点,近距离视角

操场A点,近距离视角1

操场A点,近距离视角2

TD线B点1

TD线B点2


这个生物日(起床-睡觉,和自然日不太一样……)报告了两个bug:

https://code.visualstudio.com/issues/detail/19984(由于傲游 UA 错误,系统版本不太对,应该是 10.0.10240 的。傲游可能是没写好 manifest,就像是这里所说的一样。)

https://bugs.mysql.com/78807

分享到 评论