CN114785877A - 一种实时或离线解析dds通信中rtps协议的方法 - Google Patents
一种实时或离线解析dds通信中rtps协议的方法 Download PDFInfo
- Publication number
- CN114785877A CN114785877A CN202210396385.2A CN202210396385A CN114785877A CN 114785877 A CN114785877 A CN 114785877A CN 202210396385 A CN202210396385 A CN 202210396385A CN 114785877 A CN114785877 A CN 114785877A
- Authority
- CN
- China
- Prior art keywords
- data
- reading
- idl file
- dds
- idl
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/06—Notations for structuring of protocol data, e.g. abstract syntax notation one [ASN.1]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种实时或离线解析DDS通信中RTPS协议的方法,获得符合DDS规范的数据结构定义IDL文件,使用语法解析工具构造每个IDL文件的解析树;递归解析获得每个IDL文件的Interfaces、Consts、Enums、Typedefs、Structs、Unions、Modules的结构;使用二进制数据构建器获得IDL文件中Interfaces、Consts、Enums、Typedefs、Structs、Unions对应的结构体;使用抓包工具实时从网络中获取DDS通信数据包,也可以使用离线抓取的DDS通信数据包;通过读取数据包中RTPS协议内的TopicInformation,找到已经构建好的对应类型的结构体;读取该数据包中RTPS协议内的SerializedData,对该二进制数据按照结构体进行解析,获得填充了具体属性值的结构体;递归读取该结构体,获得每一个属性对应的数据内容,并将信息输出/显示。
Description
技术领域
本发明涉及DDS通信技术,尤其涉及一种实时或离线解析DDS通信中RTPS协议的方法。
背景技术
由于现有DDS技术中使用RTPS协议进行传输,用户需要通过OMG IDL语法自定义消息结构体,而RTPS协议在传输时会将IDL定义的消息结构体序列化为二进制字节流的形式进行传递,这带来了实时/离线调试中捕获的数据包无法解读的问题,也导致了无法快速定位DDS通信中由消息传递带来的问题。
当前DDS协议栈会在每一个DDS Publisher中提供一个特殊的Debug Topic,调试工具通过订阅该Topic获得调试信息。该方法需要占用一定的带宽,且DDS网络规模越大占用的带宽也就越大。且该方法只能进行实时监控,不能离线解析DDS通信数据。
发明内容
为解决现有技术中存在的不足,本发明的目的在于,提供一种实时或离线解析DDS通信中RTPS协议的方法。
为实现本发明的目的,本发明所采用的技术方案是:
一种实时或离线解析DDS通信中RTPS协议的方法,所述方法包括步骤:
(1)获得符合DDS规范的数据结构定义IDL文件及该文件依赖的其它IDL文件,使用语法解析工具构造每个IDL文件的解析树;
(2)递归解析每一个IDL文件的解析树,获得每个IDL文件的Interfaces、Consts、Enums、Typedefs、Structs、Unions、Modules的结构;
(3)基于步骤2中获得的结构,使用二进制数据构建器获得IDL文件中Interfaces、Consts、Enums、Typedefs、Structs、Unions对应的结构体;
(4)使用抓包工具实时从网络中获取DDS通信数据包,也可以使用离线抓取的DDS通信数据包;
(5)通过读取该数据包中RTPS协议内的Topic Information信息,找到步骤3中已经构建好的对应类型的结构体;
(6)读取该数据包中RTPS协议内的SerializedData,对该二进制数据按照结构体进行解析,获得填充了具体属性值的结构体;
(7)递归读取该结构体,获得每一个属性对应的数据内容,并将信息输出/显示,也可以转化为JSON串输出。
进一步地,步骤(1)中,使用语法解析工具构造每个IDL文件的解析树具体包括步骤:
(1.1)进行预处理,剔除并不属于IDL本身的语法的语句;
(1.2)对于预处理后的文件或字符串,递归读取IDL文件中代码块的内容,解析出对应的名称、类型;
(1.3)递归读取时,将当前代码块的名称与类型放入一个字典变量中,该字典变量的结构与IDL文件本身描述的各种代码块之间的结构相一致,这个字典变量即为解析树;
(1.4)递归读取结束后,该字典变量可以被解析为JSON或者XML对象,也可以传递给后续的步骤。
进一步地,步骤(2)中,将对象从树形结构拆分为多个数组结构,获得IDL文件中所有代码块的结构。
进一步地,步骤(3)中,根据步骤2中的具体代码块的结构与RTPS协议的序列化方法的描述,生成一系列符号表,表示这些结构与数据包数组中的对应关系。
进一步地,步骤(5)中,Topic Information中含有这次通信的topic的名称,以及该topic发送的数据的类型名称,通过遍历递归解析树对象后的数组,将类型的结构描述与名称进行匹配。
进一步地,步骤(6)中,通过名称查找出由Construct生成的符号表中对应该类型的所有符号信息;通过符号信息,将数据包中的二进制数组映射到由Construct创建的该类型对应的对象中,读取出该对象所包含的所有数据信息。
本发明的有益效果在于,与现有技术相比,本发明通过实时/离线解析DDS通信中RTPS协议的方式,为DDS实时/离线通信网络诊断提供了用户可读的信息,帮助用户快速查找/定位通信中的相关问题。且该方法可以通过旁路路由监听执行诊断,不占用任何网络带宽,同时可以将通信时的数据包提前记录下来进行离线分析,极大的方便了对DDS通信网络中的故障进行诊断。
附图说明
图1是本发明所述的实时或离线解析DDS通信中RTPS协议的方法流程图;
图2是IDL文件的语法结构;
图3是wireshark抓取的通信报文。
具体实施方式
下面结合附图和实施例对本发明的技术方案作进一步的说明。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本申请的保护范围。
如图1所示,本发明所述的实时或离线解析DDS通信中RTPS协议的方法,包含以下步骤:
(1)获得符合DDS规范的数据结构定义IDL文件及该文件依赖的其它IDL文件,使用语法解析工具构造每个IDL文件的解析树;
在具体实施例中,使用ANTLR4工具对IDL文件进行解析。
ANTLR4是一个基于LL算法实现的语法解析器生成器,它由3部分组成,分别是代码生成器,语法描述文件,运行时库。其中,语法描述文件用于描述IDL文件的语法结构。
如图2所示,左边的KW_STRUCT对应右边文件中的struct关键字,identifier为结构体名HelloWorldTopic,member_list对应结构体中的成员对象,member_list按行解析为member,member则有type_spec和declarators两部分,分别对应type名(例如Test1,td_char等),declarators则为该member的名称(例如t1,td_c等)。
IDL语法描述文件可以被代码生成器识别,并编译生成对应语言的代码文件(例如Python或C#),该文件内容为读取各种结构的方法的接口,例如可以返回identifier的名称之类的。这些接口需要进行重载,编写具体的代码实现读取不同内容的功能。
该代码作为解析工具的一部分,解析工具运行时需要加载ANTLR4另外提供的一个运行时库,包含基本定义与公共方法。当解析工具读取一个具体的IDL文件时,会进行如下步骤:
(1.1)预处理,有一些语句(例如#include或#ifndef)并不属于IDL本身的语法,需要进行额外操作后剔除;
(1.2)对于预处理后的文件或字符串,递归读取IDL文件中代码块的内容(例如,struct就是一个代码块,它中间还含有member_list这个代码块),解析出对应的名称、类型;
(1.3)递归读取时,将当前代码块的名称与类型放入一个字典变量中,该字典变量的结构与IDL文件本身描述的各种代码块之间的结构相一致,这个字典变量即为解析树;
(1.4)递归读取结束后,该字典变量可以被解析为JSON或者XML对象,也可以传递给后续的步骤。
注:任何一个语法解析器生成器都可以完成上述步骤,包括但不限于ANTLR4,以及Python的LARK。
(2)递归解析每一个IDL文件的解析树,获得每个IDL文件的Interfaces、Consts、Enums、Typedefs、Structs、Unions、Modules的结构;
以IDL文件的Interfaces为例,其在IDL文件中的原始代码块示例:
经过语法解析工具解析后的解析树对象格式:
递归解析树对象后获得的格式:
其目的在于增加层级信息,将对象从树形结构拆分为多个数组结构,方便后续读取。
(3)基于步骤2中获得的结构,使用二进制数据构建器获得IDL文件中Interfaces、Consts、Enums、Typedefs、Structs、Unions对应的结构体;
使用Python下的Construct库来完成构造。由于DDS通信数据包为二进制的byte数组,又由于前两步获得了IDL文件中所有代码块的结构,因此通过该结构可以计算出byte数组中从某一位到某一位对应代码块中某个结构的具体的值,而Construct的作用就是根据步骤2中的具体代码块的结构与RTPS协议的序列化方法的描述,生成一系列符号表,表示这些结构与数据包数组中的对应关系,这是反序列化的前半部分工作。
注:任何一个二进制数据构建器均可完成该工作。
(4)使用抓包工具实时从网络中获取DDS通信数据包,也可以使用离线抓取的DDS通信数据包;
(5)通过读取该数据包中RTPS协议内的Topic Information信息,找到步骤3中已经构建好的对应类型的结构体;
如图3所示,当wireshark抓取了包含DDS服务端与客户端握手信息的一系列通信报文后,每一次通信的数据包中就会被wireshark附带上Topic Information中,其中含有这次通信的topic的名称,以及该topic发送的数据的类型名称,后者就是解析时需要的信息。通过遍历递归解析树对象后的数组,即可以将类型的结构描述与名称进行匹配。
抓包是wireshark的一部分功能,使用其它的抓包工具例如tcpdump或者libpcap都可以抓取报文。
(6)读取该数据包中RTPS协议内的SerializedData,对该二进制数据按照结构体进行解析,获得填充了具体属性值的结构体;
在获得以上信息以后,我们就知道当前数据包里的数据对应的类型名称,通过名称可以查找出由Construct生成的符号表中对应该类型的所有符号信息。通过符号信息,就可以将数据包中的二进制数组映射到由Construct创建的该类型对应的对象中,也就可以读取出该对象所包含的所有数据信息。这是反序列化的后半部分工作。
(7)递归读取该结构体,获得每一个属性对应的数据内容,并将信息输出/显示,也可以转化为JSON串输出。
假设发送端与接收端之间的通信经过一个多网口的设备(例如一个路由器),该设备可以进行抓包,则可以通过该设备进行抓包,且在抓包过程中可以对于每一个经过的报文进行以上的解析操作。该操作对于发送端与接收端都是无感知的,也不需要传输额外的数据。同时抓包数据也可以保存下来,运用在后续的离线回放分析上。
本发明的有益效果在于,与现有技术相比,本发明通过实时/离线解析DDS通信中RTPS协议的方式,为DDS实时/离线通信网络诊断提供了用户可读的信息,帮助用户快速查找/定位通信中的相关问题。且该方法可以通过旁路路由监听执行诊断,不占用任何网络带宽,同时可以将通信时的数据包提前记录下来进行离线分析,极大的方便了对DDS通信网络中的故障进行诊断。
本发明申请人结合说明书附图对本发明的实施示例做了详细的说明与描述,但是本领域技术人员应该理解,以上实施示例仅为本发明的优选实施方案,详尽的说明只是为了帮助读者更好地理解本发明精神,而并非对本发明保护范围的限制,相反,任何基于本发明的发明精神所作的任何改进或修饰都应当落在本发明的保护范围之内。
Claims (6)
1.一种实时或离线解析DDS通信中RTPS协议的方法,其特征在于,所述方法包括步骤:
(1)获得符合DDS规范的数据结构定义IDL文件及该文件依赖的其它IDL文件,使用语法解析工具构造每个IDL文件的解析树;
(2)递归解析每一个IDL文件的解析树,获得每个IDL文件的Interfaces、Consts、Enums、Typedefs、Structs、Unions、Modules的结构;
(3)基于步骤2中获得的结构,使用二进制数据构建器获得IDL文件中Interfaces、Consts、Enums、Typedefs、Structs、Unions对应的结构体;
(4)使用抓包工具实时从网络中获取DDS通信数据包,也可以使用离线抓取的DDS通信数据包;
(5)通过读取该数据包中RTPS协议内的Topic Information信息,找到步骤3中已经构建好的对应类型的结构体;
(6)读取该数据包中RTPS协议内的SerializedData,对该二进制数据按照结构体进行解析,获得填充了具体属性值的结构体;
(7)递归读取该结构体,获得每一个属性对应的数据内容,并将信息输出/显示,也可以转化为JSON串输出。
2.根据权利要求1所述的实时或离线解析DDS通信中RTPS协议的方法,其特征在于,步骤(1)中,使用语法解析工具构造每个IDL文件的解析树具体包括步骤:
(1.1)进行预处理,剔除并不属于IDL本身的语法的语句;
(1.2)对于预处理后的文件或字符串,递归读取IDL文件中代码块的内容,解析出对应的名称、类型;
(1.3)递归读取时,将当前代码块的名称与类型放入一个字典变量中,该字典变量的结构与IDL文件本身描述的各种代码块之间的结构相一致,这个字典变量即为解析树;
(1.4)递归读取结束后,该字典变量可以被解析为JSON或者XML对象,也可以传递给后续的步骤。
3.根据权利要求1所述的实时或离线解析DDS通信中RTPS协议的方法,其特征在于,步骤(2)中,将对象从树形结构拆分为多个数组结构,获得IDL文件中所有代码块的结构。
4.根据权利要求1所述的实时或离线解析DDS通信中RTPS协议的方法,其特征在于,步骤(3)中,根据步骤2中的具体代码块的结构与RTPS协议的序列化方法的描述,生成一系列符号表,表示这些结构与数据包数组中的对应关系。
5.根据权利要求1所述的实时或离线解析DDS通信中RTPS协议的方法,其特征在于,步骤(5)中,Topic Information中含有这次通信的topic的名称,以及该topic发送的数据的类型名称,通过遍历递归解析树对象后的数组,将类型的结构描述与名称进行匹配。
6.根据权利要求1所述的实时或离线解析DDS通信中RTPS协议的方法,其特征在于,步骤(6)中,通过名称查找出由Construct生成的符号表中对应该类型的所有符号信息;通过符号信息,将数据包中的二进制数组映射到由Construct创建的该类型对应的对象中,读取出该对象所包含的所有数据信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210396385.2A CN114785877B (zh) | 2022-04-14 | 2022-04-14 | 一种实时或离线解析dds通信中rtps协议的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210396385.2A CN114785877B (zh) | 2022-04-14 | 2022-04-14 | 一种实时或离线解析dds通信中rtps协议的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114785877A true CN114785877A (zh) | 2022-07-22 |
CN114785877B CN114785877B (zh) | 2023-02-17 |
Family
ID=82429654
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210396385.2A Active CN114785877B (zh) | 2022-04-14 | 2022-04-14 | 一种实时或离线解析dds通信中rtps协议的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114785877B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150370546A1 (en) * | 2014-06-24 | 2015-12-24 | Electronics And Telecommunications Research Institute | Method and apparatus for generating data distribution service application |
CN109245980A (zh) * | 2018-11-20 | 2019-01-18 | 厦门科灿信息技术有限公司 | Modbus通信协议解析方法、系统及设备和存储介质 |
CN110209514A (zh) * | 2019-08-01 | 2019-09-06 | 奥特酷智能科技(南京)有限公司 | 在嵌入式传感器接入平台实现dds服务的方法 |
CN111400228A (zh) * | 2020-02-24 | 2020-07-10 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | DDS通信中间件集成RapidIO传输的方法及系统 |
US20200314216A1 (en) * | 2019-03-25 | 2020-10-01 | Real-Time Innovations, Inc. | Language binding for DDS types that allows publishing and receiving data without marshaling |
CN112104538A (zh) * | 2020-11-18 | 2020-12-18 | 奥特酷智能科技(南京)有限公司 | 基于can总线数据传输的dds中间件通讯方法 |
CN112688924A (zh) * | 2020-12-15 | 2021-04-20 | 中国海洋大学 | 网络协议分析系统 |
WO2021074668A1 (en) * | 2019-10-14 | 2021-04-22 | Telefonaktiebolaget Lm Ericsson (Publ) | Rtps discovery in kubernetes |
CN112925768A (zh) * | 2021-03-03 | 2021-06-08 | 北京中安星云软件技术有限公司 | 一种基于Protobuf协议的HBASE数据库解析方法及系统 |
-
2022
- 2022-04-14 CN CN202210396385.2A patent/CN114785877B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150370546A1 (en) * | 2014-06-24 | 2015-12-24 | Electronics And Telecommunications Research Institute | Method and apparatus for generating data distribution service application |
CN109245980A (zh) * | 2018-11-20 | 2019-01-18 | 厦门科灿信息技术有限公司 | Modbus通信协议解析方法、系统及设备和存储介质 |
US20200314216A1 (en) * | 2019-03-25 | 2020-10-01 | Real-Time Innovations, Inc. | Language binding for DDS types that allows publishing and receiving data without marshaling |
CN110209514A (zh) * | 2019-08-01 | 2019-09-06 | 奥特酷智能科技(南京)有限公司 | 在嵌入式传感器接入平台实现dds服务的方法 |
WO2021074668A1 (en) * | 2019-10-14 | 2021-04-22 | Telefonaktiebolaget Lm Ericsson (Publ) | Rtps discovery in kubernetes |
CN111400228A (zh) * | 2020-02-24 | 2020-07-10 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | DDS通信中间件集成RapidIO传输的方法及系统 |
CN112104538A (zh) * | 2020-11-18 | 2020-12-18 | 奥特酷智能科技(南京)有限公司 | 基于can总线数据传输的dds中间件通讯方法 |
CN112688924A (zh) * | 2020-12-15 | 2021-04-20 | 中国海洋大学 | 网络协议分析系统 |
CN112925768A (zh) * | 2021-03-03 | 2021-06-08 | 北京中安星云软件技术有限公司 | 一种基于Protobuf协议的HBASE数据库解析方法及系统 |
Non-Patent Citations (1)
Title |
---|
郑树剑等: "船载网络数据订阅式通信协议设计", 《船舶设计通讯》 * |
Also Published As
Publication number | Publication date |
---|---|
CN114785877B (zh) | 2023-02-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Antunes et al. | Reverse engineering of protocols from network traces | |
US7570661B2 (en) | Script-based parser | |
CN107634848B (zh) | 一种采集分析网络设备信息的系统和方法 | |
US6954789B2 (en) | Method and apparatus for monitoring traffic in a network | |
CN110287163B (zh) | 安全日志采集解析方法、装置、设备及介质 | |
CN114050979B (zh) | 一种工业控制协议安全测试系统及装置 | |
CN110460591B (zh) | 基于改进分层时间记忆网络的cdn流量异常检测装置及方法 | |
CN109617754B (zh) | 一种实现智能变电站iec61850 通信报文可视化的方法 | |
Shevertalov et al. | A reverse engineering tool for extracting protocols of networked applications | |
CN110266702A (zh) | 基于XML的Wireshark用协议解析方法 | |
US10069797B2 (en) | 10Gbps line rate stream to disk with fast retrieval (metadata) and network statistics | |
US20080062989A1 (en) | Smart match search method for captured data frames | |
CN106648722B (zh) | 基于大数据的Flume接收端数据处理方法和装置 | |
CN114785877B (zh) | 一种实时或离线解析dds通信中rtps协议的方法 | |
CN115913655B (zh) | 一种基于流量分析和语义分析的Shell命令注入检测方法 | |
CN111797618A (zh) | 一种基于语法树解析的日志分析方法及装置 | |
CN114765633A (zh) | 基于列车实时以太网协议的网络报文解析方法及装置 | |
CN115801927A (zh) | 报文解析方法及装置 | |
WO2010025062A1 (en) | Automatic test map generation for system verification test | |
CN114416597A (zh) | 测试用例记录的生成方法和装置 | |
CN112910842A (zh) | 一种基于流量还原的网络攻击事件取证方法与装置 | |
Ouyang et al. | Research on Vehicle Network Analytic System Based on Ethernet Protocol Parsing | |
CN116506291B (zh) | 一种电力系统网络设备配置内容解析方法及装置 | |
CN116795663B (zh) | 一种跟踪分析trino引擎执行性能的方法 | |
CN117336389A (zh) | 一种数据解析方法、装置、设备以及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder | ||
CP02 | Change in the address of a patent holder |
Address after: 210012 room 401-404, building 5, chuqiaocheng, No. 57, Andemen street, Yuhuatai District, Nanjing, Jiangsu Province Patentee after: AUTOCORE INTELLIGENT TECHNOLOGY (NANJING) Co.,Ltd. Address before: 211800 building 12-289, 29 buyue Road, Qiaolin street, Pukou District, Nanjing City, Jiangsu Province Patentee before: AUTOCORE INTELLIGENT TECHNOLOGY (NANJING) Co.,Ltd. |