-
摘要:通过使用wireshark网络抓包工具进行抓包的方式,参考相关接口文档,对AirNet自动化系统提取三汇语音记录仪录音的方法原理进行研究,对AirNet自动化系统及三汇语音记录仪处理录音提取任务的全流程进行梳理,解释了整体的信号传输流程,详细阐述了各接口数据格式、数据类型、具体内容及各字段编码规则,并对实际使用中的注意事项进行了说明。同时,使用Java实现了一个模拟该请求及获取流程的软件,并阐述了该软件的技术原理及各核心功能的实现方式。通过该软件可模拟AirNet自动化系统获取三汇记录仪指定通道及时间段的全流程,同时提供了任务管理能力,用户通过该模拟软件可直接从三汇语音记录仪中提取指定通道及时间段的录音。该方法可作为现有工具的备份手段,满足快速提取三汇记录仪录音的需求。
关键词:AirNet;空管自动化系统;景象回放;Java
0引言
空中交通管制自动化系统是民航空管单位管制员实施空中交通管制时使用的最为核心的设备之一[1]。云南空管分局目前使用的备用空中交通管制自动化系统是由成都民航空管科技发展有限公司生产的AirNet/Linux-A型空中交通管制自动化系统(AirNet自动化系统)。在该自动化系统的数据记录和回放子系统中,有一个通过连接到三汇语音记录仪并获取指定时段与指定通道的内话系统录音文件的功能,该功能是提供AirNet自动化系统景象回放数据导出功能的基础之一。在近期经过升级后新增了景象回放数据导出功能,该功能可将AirNet自动化系统各席位的空管飞行态势显示界面的视频记录数据转换为可以使用主流视频播放器播放的MP4格式文件,同时通过连接至独立的用于记录空管语音通信交换系统(空管内话系统)席位录音的三汇语音记录仪来获取指定时段与指定通道的音频文件,最终将该音频文件与导出的MP4视频文件合并,从而得到完整的空管景象回放视频。三汇语音记录仪是空管语音通信交换系统语音记录的设备,该设备可24 h不间断地记录内话系统各席位的地-地、地-空通信语音数据。
AirNet自动化系统从自己的数据记录和回放子系统中提取的席位视频文件是该系统的专有视频格式文件,无法通过通用软件播放或解析。而AirNet自动化系统从三汇语音记录仪获取指定时段与指定通道内话录音的过程是以Socket通信的方式进行的,通过对该通信过程进行抓包并参考相关接口文档即可得知AirNet自动化系统提取三汇语音记录仪录音的完整流程。同时,本文还根据该提取方法使用Java语言及Springboot框架设计实现了对应的提取工具软件,方便运维人员直接对相应录音进行提取。
1整体交互模式
1.1提取录音模块
AirNet自动化系统与其他以类UNIX系统为基础操作系统的空管自动化系统类似,主体架构同样采用C/S模式,由服务端处理数据及发布[2]。在AirNet自动化系统中,负责与三汇语音记录仪交互的设备为数据记录和回放子系统(DRP)[3],该子系统由两个独立的服务器组成。与其他子系统一样,两台DRP服务器也有主用和备用之分,只有当前为主用状态的DRP服务器才会负责进行与三汇语音记录仪的交互。
录音提取指令由用户手动在飞行态势显示子系统(SDD)的回放功能窗口,通过人工录入的方式输入要提取的起止时间段及对应三汇语音记录仪的通道号,SDD将相关数据传递至DRP后由DRP与三汇语音记录仪以网络方式进行后续交互[4-5],同时在SDD界面向用户反馈提取进度及结果。
1.2录音提取接口模块
三汇语音记录仪通过其集群服务器上运行的RCIServ程序对外提供提取记录仪上记录的语音数据的接口,提取完成后通过FTP服务对外提供下载能力。RCIServ程序监听本机的指定端口,通过使用OSI参考模型中第4层的TCP协议直接传输指令内容,即直接将指令数据封装在TCP数据载荷报文段中进行传递,应用层的RCIServ程序对其进行解析处理并以相同方式进行响应[6]。
提取完成后RCIServ程序会返回相应文件名,此后便可关闭TCP连接。用户可连接到集群服务器的FTP服务上,通过返回的文件名获取文件[7]。
2 RCIServ程序指令交互方法
2.1指令结构
RCIServ程序接收及响应的指令由“指令ID”、“数据长度”、“数据内容”3个字段组成,具体含义如表1所示。其中涉及到需要传输的数据均使用ASCII标准进行编码。
2.2指令列表
RCIServ程序通过登录、登出、设置回放通道等不同指令来与三汇语音记录仪进行交互,同时通过已登录、已登出、回放通道设置完成等指令来向调用方返回请求执行结果。具体指令列表如表2所示。
通过使用wireshark软件在三汇语音记录仪集群服务器上进行实际网络抓包分析[8-10],发现指令发送时指令ID字段和数据长度字段实际发送的十六进制数顺序是颠倒的。例如,对于C LI _ LOG__ IN指令,其指令ID为1115,转换为二进制数为00 00 01 00 01 01 10 11,从最低位开始,转换为十六进制数为04 5b,但实际在传输时指令ID字段传输的十六进制数为5b 04。数据长度字段也同样要按此要求翻转,需要特别注意。
CLI_ SET_ REPLAY_ CHANNEL指令的数据内容为选中的回放通道,长度为4000。具体来说,前4个字节固定为十六进制数0,其余3996个字段以4个字节为一组,每组的第一个字节即为该组对应通道的选中状态标识。具体计算公式如式(1)所示。
y=4+4x-3(1)
式中:x为要选择的通道号,数据内容字段字节需要将第y个字节置为十六进制数1,其他字节均为十六进制数0。
例如,需要回放2号通道,则数据内容字段需要传输的十六进制数据为00 00 00 00 00 00 00 00 01 00 00 00…00。CLI_ SET_ REPLAY_ TIME指令的数据内容为设定的录音起止时间,按“yyyyMMddHHmmss”的格式传递,其中每一位数字占一个字节,并在每串日期时间值后加一个十六进制数0结尾。
例如,需要回放2023年12月17日11:30:00至2023年12月17日11:40:00之间的录音,则数据内容字段需要传输的十六进制数据为3230 32 33 31 32 31 37 31 31 33 30 30 30 00 32 30 32 33 31 32 31 37 31 31 34 30 30 30 00。SVR_ AUDIO_ READY指令的数据内容为RCIServ程序提取的音频文件名,数据内容字段中每一位的内容组合起来即为文件名,以十六进制数0结尾。
例如,若返回的文件名为5409__ 231217113000_ 001000_ PP001 _ A _0005.WAV,则数据内容字段需要传输的十六进制数据为35 34 30 39 5f 32 33 31 32 31 37 31 31 33 30 30 30 5f 30 30 31 30 30 30 5f 50 50 30 30 31 5f 41 5f 30 30 30 35 2e 57 41 56 00…00。
2.3交互流程
当客户端程序需要获取三汇记录仪音频文件时,首先由客户端向服务器端(三汇语音记录仪集群服务器RCIServ程序)指定端口发送TCP连接请求并建立TCP连接,此后便按以下步骤依次发送请求及获取响应。
(1)发送CLI_ LOG_ IN指令
登录。正常情况下会收到服务器回复的SVR_ LOGGED _ IN指令,表示已登录。
(2)发送CLI_ SET_ REPLAY_ CHANNEL指令
设置回放通道号。正常情况下会收到服务器回复的SVR_ REPLAY_ CHANNEL指令,该指令的数据内容字段中会按相同方式注明选择的通道号,表示指定通道设置成功。若收到回复SVR_ UNEXPECTED指令,则一般是选择的通道号有误,需要重新从头开始交互。
(3)发送CLI_ SET_ REPLAY_ TIME指令
设置回放起止时间段。正常情况下会收到服务器回复的SVR_ REPLAY_ TIME指令,该指令的数据内容字段中会按相同方式注明设置的起止时间段,表示指定回放起止时间段设置成功。若收到回复SVR_ UNEXPECTED指令,则一般是设置的时间范围有误或指定时段内没有任何录音,需要重新从头开始交互。
(4)发送CLI_ AUDIO_ READY指令
查询记录仪是否已提取到指定音频文件。正常情况下会在一段时间(通常为2s,在RCIServ程序配置文件中配置)内收到服务器回复的SVR_ AUDIO_ READY指令,该指令的数据内容字段中会载明RCIServ程序提取的音频文件名,表示已提取到指定音频文件。若收到回复SVR_ UNEXPECTED指令,则一般是三汇记录仪内部传输错误或记录仪FTP服务故障,需要重新从头开始交互。若在一段时间(通常为2s,在RCIServ程序配置文件中配置)后仍为收到服务器回复的SVR__ AUDIO__ READY或SVR_ UNEXPECTED指令,则需要向服务器发送CLI_ FREE_ REPLAY_ RESOURCE指令资源后再次发送该指令。
(5)发送CLI_ FREE_ REPLAY_ RESOURCE指令
释放三汇服务器回放资源。若在发送CLI_ AUDIO_ READY指令后收到了服务器回复的SVR _ AUDIO _ READY或SVR_ UNEXPECTED指令,则无需执行该步骤。正常情况下会收到服务器回复的SVR_ REPLAY_ RESOURCE指令,表示回放资源已释放。
(6)发送CLI_ LOG_ OUT指令
登出。正常情况下会收到服务器回复的SVR _ LOGGED_ OUT指令,表示已登出。在以上步骤执行完成后,将得到RCIServ程序提取的音频文件名,此后客户端通过连接到三汇语音记录仪集群服务器FTP服务端口,下载根目录下的该音频文件到客户端即可得到提取的音频文件,文件格式为wav。
若在发送CLI_ LOG_ OUT指令之前客户端需要中断整个获取流程,可向服务器发送CLI_ STOP指令,正常情况下会收到服务器回复的SVR_ HARD_ STOP指令,表示流程已停止。
3模拟软件实现
3.1程序结构
通过使用编程方式可创建一个连接三汇语音记录仪获取指定通道及时段的模拟客户端程序,后续可为用户提供便捷的图形界面或为第三方程序提供API来提取三汇记录仪音频。本文使用Java语音及Springboot框架来编写一个实现上述基本交互流程的程序[11-13],用户界面部分使用Angular编写,提供了一个基本的后台管理界面、任务表格视图及增删查改表单窗体,在此不做赘述。鉴于MySQL数据库在各行业应用广泛,且具有轻量、高性能的特点[14],故使用MySQL作为程序后端数据库,并使用JDBC与数据库连接[15-16]。
除用户界面部分外,程序主要由3部分组成,分别是任务管理模块、三汇语音记录仪服务器交互模块和网络状态监测模块。各模块中涉及到操作全局静态变量的方法均使用手动加锁的方式,防止出现当定时任务重复执行时出现上一个任务方法还未完全结束就开始再次执行相同方法的情况。
3.2任务管理模块
任务管理模块通过将用户界面或API传入的任务进行前置处理(判断数据合法性、对相应任务状态赋初始值等)并存入数据库。此外,还使用单独的线程定时从数据库中载入新的提取任务到程序的全局静态变量中,供其他模块调用,并将已完成、人工停止或已出错的任务从任务列表中清除。
前置处理中的数据合法性判断功能主要包括以下几个方面。
(1)起止时间合法性判断
判断用户输入的任务起止时间是否为系统可识别的日期时间格式,判断待提取录音的开始时间是否小于结束时间,判断结束时间与开始时间的差值是否过长,判断开始时间是否早于记录仪的录音最长保存时间。
(2)通道号合法性判断
判断用户输入的通道号是否为数字,判断数字的范围是否在记录仪已有通道范围内。
3.3三汇语音记录仪服务器交互模块
三汇语音记录仪服务器交互模块使用单独的线程定时检测程序的全局静态变量中是否有待执行的新任务,在核对任务参数后按指令格式要求组装指令,与服务器建立TCP连接后使用Java的NIO模块向服务器发送指令并接收处理响应[17-19]。
其中向服务器发送指令的部分功能代码如下:

其中的intToReversedByteArrayAndFill()方法用于翻转字节,即将传入的byte数组中的所有元素重新倒序排列。
接收并处理服务器发来的指令的功能主要通过取出响应结果中的data部分数据,根据数据内容对当前任务的状态进行更新。对于返回的响应为SVR__ AUDIO__ READY的情况,会进一步取出结果中的文件名并更新到当前任务对象中。最后将任务对象持久化到数据库中。
从服务器FTP上下载并存储音频文件的部分实现代码如下[18]:

3.4网络状态监测模块
网络状态监测模块用于实时监测客户端与三汇服务器的网络联通状态,为其他模块的网络连接请求提供决策依据[21-23]。
其中检测到服务器连接是否正常的部分方法代码如下:

4结束语
当前空中交通管制自动化系统与其他外部设备的联系日趋紧密,作为空管自动化系统的运维人员,有必要对空管自动化系统与其他外部设备的数据交互原理及流程有较为深刻的认知。本文通过分析AirNet空管自动化系统与三汇语音记录仪进行交互并获取指定通道及时间段音频文件的整个流程,探讨了三汇语音记录仪的接口交互原理、调用方法及注意事项,并根据该流程设计实现了一套模拟软件。模拟软件使用Java实现,通过对提取任务的状态管理,实现了从开始提取、收发服务器请求到下载导出音频文件、标记结束状态等全流程的功能。该软件可作为现有AirNet空管自动化系统相应提取软件的备份手段,用于其他需要快速提取三汇语音记录仪录音的场合。
参考文献:
[1]汪万维.民航空管自动化系统[M].北京:清华大学出版社,2016.
[2]林宇君.基于Java的空管自动化屏幕录像的设计与实现[J].机电工程技术,2019,48(2):82-84.
[3]黄丹臖.AirNet空管自动化系统记录与回放功能的应用维护[J].电子技术与软件工程,2022(11):121-124.
[4]尹德秀.AirNet空管自动化系统信号引接方式[J].电脑知识与技术,2016,12(36):272-273.
[5]方丹.AirNet空管自动化系统的设计与功能研究[J].数字技术与应用,2010(9):11.
[6]Beijing EasySky Technology Ltd.Wuhan Atc Interface Control Document-Audio Request[Z].2020.
[7]刘颖.基于FTP与设备控制系统数据传输的以太网通信技术探讨[J].锻压装备与制造技术,2023,58(4):89-90.
[8]赵菁.基于Wireshark的IPSec协议抓包分析[J].电脑编程技巧与维护,2023(12):32-34.
[9]辛伟伟,郝继升,张成.基于Wireshark的D HCP网络故障定位分析[J].延安大学学报(自然科学版),2018,37(1):34-36.
[10]黄鲁江,雷烨,成邁.Wireshark协议解析在网络故障排查中的应用[J].铁道通信信号,2016,52(10):52-55.
[11]李检辉.基于TCP的Java Socket网络连接过程要点分析[J].电脑知识与技术,2023,19(20):103-105.
[12]王智印,李丹.Java基于TCP/IP协议的Socket通信[J].产业与科技论坛,2017,16(21):41-42.
[13]陈浩,张伟.基于Java socket的TCP/IP网络编程[J].计算机光盘软件与应用,2013,16(2):35-37.
[14]尹磊,李奕,薛骐.基于MySQL的架空输电线路数据高效处理方法[J].机电工程技术,2017,46(6):114-116.
[15]欧阳桂秀.基于Java和MySQL的数据库管理系统的设计与实现[J].信息记录材料,2022,23(9):240-242.
[16]张振超,吴杰,陈序蓬.浅谈Java中MySQL数据库的连接与操作[J].信息记录材料,2020,21(02):144-145.
[17]赵思远.基于Java NIO的高性能网络系统的研究与应用[D].北京:北京工业大学,2021.
[18]赵思远.Java NIO与IO性能对比分析[J].软件导刊,2021,20(4):214-219.
[19]王少辉,陈晓鹏.基于Java的socket I/O流技术[J].电子技术与软件工程,2017(9):30-31.
[20]王明星,毕于深,李敏莉.基于Java的FTP客户端开发应用[J].电脑开发与应用,2005(9):57-59.
[21]董华敏,杨华.Ping命令使用误区探讨[J].网络安全和信息化,2023(6):160-161.
[22]林宁.基于C isco Packet Tracer的网络安全技术实践研究—以ICMP协议分析为例[J].科技创新与生产力,2021(9):104-108.
[23]杨华,董华敏.ICMP协议故障检测应用分析[J].网络安全和信息化,2021(7):155-157.
后台-系统设置-扩展变量-手机广告位-内容正文底部 |
-
<< 上一篇
下一篇:没有了!