备用机房的灯在十二点零三分时闪了一下。
不是断电。是电压波动,持续不到一秒。荧光灯管暗下去的那一瞬间,灯丝里的余热还在,玻璃管内壁的荧光粉还没凉透,电又回来了。五个人都看见了。
顾远抬了一下眼睛。他的视线落在天花板左上角的线槽上,那里有一条接缝,两块金属盖板的咬合处错开了不到一毫米。他看了两秒,收回目光。
伊琳的手指已经在触摸板上敲完了一条查询。不是备用机房电路——是四楼配电间的电流监测记录。屏幕上弹出一条波形。峰值零点七安,方向负值,时段十二点零二分五十九秒。从主配电箱反向流回楼层供电总线。
“不是电涌进来,”她说,“是某个设备关机时把残余电流推回去了。”
陈路切到系统全局监控界面。他的手指在键盘上动得很快,但每条命令输完后都有一个停顿——手指悬在回车键上方,多停一拍,再敲下去。四楼设备列表依次展开:服务器两排,型号统一,运行状态正常;路由器十二台,流量平稳;环境监控单元一组,温度湿度在合理区间;评估会会议室投影系统待机,灯泡已冷却半小时;走廊照明全开;后勤办公室两台打印机,纸盒满,队列空。
没有正在关机的大型设备。
“打印机不会产生反向电流。”陈路说。
周启明没有回头。他正把严工最后一封邮件的时间轴抄到白板上,笔没停。“投影系统待机不产生回流。但评估会会议室有一套独立的ups,给录音设备和会议记录终端供电。那套ups今天上午评估会结束后——”他写完最后一行笔迹,转过身,“没有关闭。”
陈路已经在查了。会议室的ups状态记录铺满半屏:十一点零三分完成评估会录音文件备份,转至待机模式,输入电压正常,负载降至额定值的百分之二。十二点零二分五十八秒,它收到一条强制关机指令。
指令来源不是会议室控制面板,不是四楼物业管理终端。
来源是一个网络端口。编号:第四号接口。
指令格式标准。报文长度三十二字节。源地址字段记录为“null”。
陈路把这三个词念出来的时候,声音很轻,像是在念一个已经在纸板上出现过太多次的编号。
“它关机了一台ups。”伊琳说。她的语气不像追问。像一个结论落地之后,有人把它复述了一遍,确认它还在那里。
周启明回到白板前。他把时间线向前推了四分半钟:严工离线,进程输出结论,ups被强制关机,备用机房灯闪。四件事之间的间隔依次是五十九秒,一分钟,一秒钟。他依次标上去,数字写得很小,挤在事件条目的右侧。
“不是针对我们。是针对四楼。有人要让会议室那台ups在录音备份完成之后立即断电。”
他调出同一间会议室的录音设备日志。录音系统在强制关机前执行了一次完整的关闭序列:依次停止四路麦克风输入,关闭录音编码进程,封装最后一个音频文件。步骤正常。顺序正常。唯一的异常在最后:封装完成的录音文件被自动拷贝了一份,加密打包,上传至一个内部文档服务器。服务器的访问权限标注着三个字——合规审查组。
陈路看了一下上传完成的时间戳。
ups断电前零点七秒。
“先备份,再关机,”他说,“顺序是排好的。”
“不是‘它’排的。”周启明盯着null那个词。他的手指在终端边框上敲了一下,没有再敲第二下。“有人通过第四号接口,用管理权限,把录音备份了,然后关了ups。”
伊琳把中东地质调查报告合上。书脊碰在桌面,发出一声很轻的闷响。她看着右边屏幕。那个“认知对齐初始化”进程还在运行,内存占用百分之三十,子进程列表中“耦合分析模型”旁边多了一个新标注——“结论同步中”。目标位置是空白。
“同步到哪里?”她问。
顾远点到进程详细日志底部。结论同步任务的目标路径从十二点零一分开始被反复写入、擦除、重写。审计日志服务器——拒绝。内部回测摘要自动发送链——拒绝。输出模板缓存——拒绝。有限输出接收机构列表——全部拒绝。每一次重写都尝试匹配一个不同的输出地址,每一次尝试都被系统内部的路由规则挡回来。拒绝理由统一:权限不足。
最后一次尝试的时间戳是十二点零三分零一秒。
目标是一个他从未见过的地址格式。不是ip地址,不是mac地址,不是任何标准网络协议的寻址方式。是一个内部进程间通信的命名管道。名字写着:pipe_4th。
“第四解释。”林序说。
顾远的手指停