一种基于嵌入式软件的细粒度检测方法

文档序号:7759741阅读:377来源:国知局
专利名称:一种基于嵌入式软件的细粒度检测方法
技术领域
本发明属于嵌入式软件测试领域,特别是涉及一种基于嵌入式软件网络使用的检 测方法。
背景技术
随着嵌入式软件的发展,独立的、本地的嵌入式应用越来越少,而基于局域网、广 域网甚至Internet的嵌入式应用需求越来越多,尤其在数字家电领域,随着智能家电的发 展,UPnP、IGRS等规范的普及,嵌入式网络服务程序在嵌入式软件中的比例越来越大。当开 发人员开发该类型的嵌入式软件时,需要针对网络环境进行详尽的设计,包括对身份进行 认证、对有限的网络资源进行分配,故需要清楚指定的程序运行时对网络的详细使用情况, 包括其所维护的连接、使用的端口、发送和接收数据的速度和大小等等。由于Linux有着开源、稳定、易于裁剪和定制、网络功能强大等优势,嵌入式Linux 在嵌入式OS中的比重仍然非常大。纵观目前基于Linux的主要网络工具,如netstat、 entstat、netpmon、iptrace、tcpdump等,所能达到的功能只是针对系统整体的、某个特定网 络接口或者某种特定协议的网络流量、数据包收发情况的分析,监控粒度仍然较粗,对于特 定进程,甚至特定进程的某个特定端口的流量情况无能为力。而这些信息对于嵌入式软件 网络的优化来说,是至关重要的。衡量一个网络服务程序的网络性能是一项十分复杂的工作,因为这涉及多个系统 的交互问题,并且包括硬件环境的影响,然而网络服务程序的响应速度、网络负载及网络利 用率始终是重要的标准。在如今的网络环境中,安全性对于网络应用程序来说始终是一个 重要的指标。尤其在智能家电发展的今天,家电的数字化、智能化同时也带来了安全问题, 如何防止不信任连接的发生至关重要。目前来看,Linux系统下的网络流量监控工具都只停留在对系统整体的流量进行 监控上,没有一个便于使用的对特定进程的特定端口进行监控的软件。

发明内容
本发明的目的在于克服现有技术因监控粒度较粗的不足,提出了一种基于嵌入式 软件网络使用的细粒度检测方法,从而可以解决目前嵌入式软件网络性能优化能力不足的 问题。为了实现发明目的,采用的技术方案如下一种基于嵌入式软件的细粒度检测方法,由客户端和测试代理端两部分共同协作 完成,所述客户端设置在开发机中,而测试代理端设置在目标机中,客户端和测试代理端通 过网络进行通信,测试代理端所采集的样本数据通过网络实时发送给客户端进行分析,所 述测试代理端包括用于采集和统计样本数据的内核模块和进行样本数据传递的测试代理 模块,所述内核模块运行于嵌入式系统的内核空间中,实现数据包的采集和统计,并提供接 口供测试代理模块进行配置和读取,所述测试代理模块运行于嵌入式系统的用户空间中,实现监听特定端口,提供测试服务,与发起连接的客户端进行交互,并且读取内核模块采集 的数据,通过网络发送给客户端,所述客户端以Eclipse插件的形式运行于开发机中,并通 过网络同测试代理模块进行交互,将控制命令或者经过交叉编译工具链编译的可执行文件 发送给测试代理模块。上述技术方案中,所述内核模块包括NetFi IterHook模块、端口匹配规则、控制模 块、proc文件系统接口以及流量信息缓存;所述NetFilterHook模块是基于NetFilter框架的扩展模块,建立在NetFilter 的IP_L0CAL_IN和IP_L0CAL_0UT两个HOOK点上,对进出本地网络端口的链路层数据包 进行抓取和分析,根据端口匹配规则分析相应的数据包,并根据分析结果更新流量信息缓 存;所述端口匹配规则是一个查找表,支持动态的插入、删除和查找操作,记录着需要 NetFilterHook模块分析的数据包所对应的端口号;所述控制模块通过proc文件系统与用户空间进程进行交互,接收PID以及对应的 端口更新列表,经过匹配运算,向端口匹配规则中进行更新,以及维护用户进程Pid和所监 控进程Pid的关系表;所述proc文件系统接口是内核空间和用户空间进行交互的接口,内核模块通过 它向用户进程提供所需信息的查询接口 ;同时,用户空间对其进行写操作,把它做为内核模 块的配置接口;所述流量信息缓存属于内核的共享结构,是一个便于查找的哈希表结构,维护端 口和其流量信息的对应关系。所述测试代理模块包括Slave pool、连接分配器、工作线程与服务进程;所述Slave pool由多个服务进程组成,并记录它们的状态,以便连接分配器能够 了解并正确对socket连接进行分配,Slave pool通过Domain Socket同服务进程通信,传 递socket句柄,并了解它们的状态;所述连接分配器负责监听服务端口,接收连接请求并调用Slave pool的接口对请 求进行分配和管理。所述工作线程负责执行所有需要与内核交互的任务;所述服务进程负责与客户端进行交互,并且操作与工作线程共享的数据。所述客户端包括数据收集器和数据处理模块,所述数据收集器实现为客户端接收 数据,并传送给数据处理模块进行数据的解析,所述数据处理模块按照设定的格式对数据 拆解分类,更新⑶I上相应的组件。本发明所述检测方法如下在目标机上当用户操作GUI时,触发控制器的事件响应时,测试代理端接收命令 和文件并且执行,同时启动测试代理端的内核模块进行协议栈网络层的数据包采集,测试 代理端的测试代理模块分析统计数据包,再把相关数据发送到开发机的客户端,由客户端 在开发机上进行分析,从而实现对嵌入式软件网络使用进行交叉的检测。本发明通过客户端模块和测试代理端模块对嵌入式软件进行了实时在线的网络 监测,并且能将监测粒度细化到指定进程的每一个端口,实现了细粒度的网络监测。


图1为本发明的测试模式框架图;图2为本发明的检测方法框架图;图3为测试代理模块框架图;图4为内核模块框架图;图5为客户端框架图;图6客户端控制层控制器功能图;图7客户端控制层数据收集和数据处理图具体实施方法下面结合附图对本发明做进一步的说明。本发明为了实现实时在线的性能测试,采用基于交叉测试的测试模式,如图1所 示,测试工具运行在软硬件配置丰富的开发机上,它对被测程序进行处理后,使其运行在软 硬件资源相对缺乏的目标机上,产生测试信息,并通过一定的通信连接由测试代理传输到 开发机上,由测试工具接收。本发明为了实现对嵌入式软件的实时在线的细粒度的网络监测,采用将监测粒度 细化到指定进程的每一个端口的技术。可以浏览目标机上的所有进程列表,并且可以选择 任何一个进程进行网络监测;也可以将在开发机上编译好的可执行程序上传至目标机并运 行,同时对其进行网络监测。在Iinux内核中Netfilter适当的hook点上进行钩子函数的 注册,便可以对流经协议栈的每一个数据包进行采集和分析,精确地统计每一个进出传输 层的网络层数据包。测试人员得到IP数据包之后,对其进行分析和统计,从中提取出有用 的信息,来实现嵌入式软件网络使用的细粒度监测。本发明将细粒度的网络监测技术结合嵌入式软件交叉测试模式,提出了一种基于 嵌入式软件网络使用的细粒度检测方法。该方法的整体框架如图2所示。整个框架分为两 个部分在开发机的客户端和在目标机的测试代理端,两部分通过网络进行通信。在目标机 上当用户操作GUI时,触发控制器的事件响应时,测试代理端接收命令和文件并且执行,同 时启动测试代理端的内核模块的数据采集模块进行协议栈网络层的数据包采集,测试代理 端的测试代理模块分析统计数据包,再把相关数据发送到开发机,在开发机进行分析,从而 实现对嵌入式软件网络使用进行交叉的检测。测试代理端运行于目标机的嵌入式操作系统上,由内核模块和测试代理模块两个 部分组成,内核模块和测试代理模块通过proc文件系统进行信息上的交互,测试代理模块 则根据通信协议与客户端进行Socket通信,将收集到的信息实时发送给客户端进程。测试代理模块如附图3所示,对特定的端口进行监听,当有客户端的连接请求到 来时,监听者接收该连接,等待客户端发送服务类型,如网络监测服务,然后将连接交给分 配器Dispatcher处理。Dispatcher维护着一个Slave pool进程池,其中包含了若干服务 进程,它们可能处于空闲状态、忙碌状态或死亡状态。Dispatcher根据Slave pool的状况, 将连接分配给其中的一个空闲进程后,继续监听,等待下一个客户端请求。当Slave pool 中没有空闲进程时,请求将会放入请求队列。一旦服务进程接收socket句柄后,便可以同 客户端进行交互,根据客户端发送的命令进行相应的操作,包括发送进程列表、执行客户端 发送过来的可执行文件以及监测指定进程。在监测被测程序的过程中,服务进程使用了一个工作线程与其协作,将与内核交互的工作交付给线程执行,它们之间通过共享数据进行 交互及同步。在测试代理端中的测试代理模块使用Slave pool是为了消除频繁地创建和销 毁进程所带来的系统开销,并且可以更方便地控制测试代理连接的数量,减少网络开销。 Slave pool是一个简单的、专为测试代理实现的进程池,在LinuxKDE源码中,有类似的I/ O-Slave机制,用于底层的I/O通信。在网络监测工具的具体实现中,Slave pool由多个 服务进程组成,并记录它们的状态,以便分配器能够了解并正确对socket连接进行分配。 Slave pool通过Domain Socket同服务进程通信,传递socket句柄,并了解它们的状态。Dispatcher连接分配器,负责监听服务端口,接收连接请求并调用Slave pool的 接口对请求进行分配和管理。它维护了一个FIFO的请求队列,如果服务器繁忙,则请求需 要进行排队,而不是无限制地fork服务进程,造成目标机负担过重,影响被测程序的正常 运行。使用工作线程来与服务进程并发的原因在于,监测一个指定进程,需要频繁地进 行两种1/0操作获取当前系统的所有tcp/udp端口号和其相应的inode,以及与内核交 互。并且服务进程需要随时响应客户端的命令请求,如果两种工作都由服务进程来执行,势 必会影响执行效率,使这些工作都受到影响,因此在服务进程接到监测被测进程命令时,便 启动一个工作线程与其协作。工作线程的任务是执行所有需要与内核交互的任务,包括向 内核中写入当前系统网络端口和inode表、读取流量数据以及服务进程退出时通知内核进 行信息更新。网络端口和inode表由服务进程通过共享数据传递给工作线程,并且已经按 照端口号进行了排序。由于有工作线程的协助,服务进程的任务是与客户端进行交互,并且 操作与工作线程共享的数据。当它接收到Dispatcher发送过来的与客户端连接的socket 句柄后,服务进程进入一个循环中,对该句柄select并进行超时处理来同时进行与客户端 交互、对共享数据的操作。 内核模块运行于嵌入式Linux的内核空间中,分为NetFiIterHook模块、端口匹配 规则、控制模块、proc文件系统接口以及流量信息缓存,附图4所示。NetFilterHook模块 通过hook机制完成对数据包的过滤,内核模块能在这些hook点上注册函数对数据包进行 修改、检查或丢弃便可以对流经协议栈的每一个数据包进行采集和分析,且能够针对特定 进程的每一个端口进行统计实现细粒度的网络监测方法。端口匹配规则是一个高效的查找 表,支持动态的插入、删除和查找操作,记录着需要NetFilterHook模块分析的数据包所对 应的端口号。控制模块通过proc文件系统与用户空间进程进行交互,接收PID以及对应的 端口更新列表,经过匹配运算,向端口匹配规则中进行更新,以及维护用户进程Pid和所监 控进程Pid的关系表。proc文件系统接口向测试代理提供接口来对采样进行读取和配置。 流量信息缓存维护端口和其流量信息的对应关系。测试代理运行于Embedded Linux的用 户空间中,负责从网络中接收数据和控制信息、配置内核模块、读取样本数据、将样本数据 发送给位于宿主端的客户端。 内核模块被插入内核后,进行一系列的初始化工作。它首先在Proc文件系统中注 册三个文件,分别用于1)测试代理端的测试代理模块的监测进程将操作系统当前所有已 建立的tcp/udp端口号和inode号写入内核,并更新相应的哈希表;2)用于测试代理模块 监测进程从内核中读取其监测的进程的所有端口的流量信息,需要实现它的读函数;3)用于测试代理模块的监测进程退出时通知内核删除与其相关的信息的接口,所提供写操作的 实现。采用Proc文件系统作为交互的接口,在各种版本的Embedded Linux中可移植性较 好。在内核模块中,维护了三个核心的信息表,整个内核模块的工作便围绕着这三张 表进行。1)记录监测进程和被测进程之间对应关系的哈希表,每当需要进行对访问进程进 行身份确认时,需要查询该表。这样的设计使得内核模块能够支持多个监测程序的并发访 问,正确处理不同监测进程的不同请求。2)记录着被测进程pid和其所打开的端口的哈希 表,当内核需要获得某个进程的所有端口号时,需要对此表进行查询。3)流量信息缓存表是 记录每一个被监测端口号以及和其相关的流量信息的哈希表。当Netfilter的NF_INET_ L0CAL_IN和NF_INET_L0CAL_0UT两个hook点上的hook函数得到数据包后,需要对该哈希 表进行查询,以便识别数据包中的本机端口是否是需要监测的端口。当用户操作⑶I时,触发控制器的事件响应,通过Java Socket将控制命令或者经 过交叉编译工具链编译的可执行文件发送给目标机的测试代理端。测试代理端接收命令和 文件,通过proc接口对内核模块中的一系列信息表进行配置和修改,并且执行接收到的可 执行文件,将其作为被测程序。控制模块通过proc接口接收命令,启动数据采集模块进行 协议栈网络层的数据包采集。后者启动后,结合信息表中的规则,对每一个IP数据包逐一 分析和统计,将符合规则的数据统计后放入流量信息缓存中。测试代理端中的测试代理模 块通过proc文件的数据接口从内核缓存中按照一定的格式读取数据。控制模块对读取进 程进行识别,将其所关心的相关数据交付给后者。客户端模块以Eclipse插件的形式运行于软硬件资源丰富的开发机中,采用MVC 模式进行设计和实现即模型-视图-控制(Model-View-Control)模式,客户端模块的框架 如附图5所示。展示层,即视图层,通过Eclipse扩展点,对平台进行功能扩展,实现对实时 在线的网络监测统计分析结果的展示。在控制层中,包含数据收集器、数据处理器以及控制 器三个模块。控制器负责连接测试代理端,对测试过程进行控制,如开始、停止、断开等,也 能够以XML格式保存测试结果,以方便离线查看。它的功能主要由视图层的控制视图调用, 如图6所示。客户端通过网络同测试代理端进行交互,将控制命令或者经过交叉编译工具 链编译的可执行文件发送给目标机的测试代理端,数据收集器负责为客户端接收数据,交 给数据处理模块进行数据的解析。后者按照一定的格式对数据拆解分类,更新GUI上相应 的组件,数据收集与数据处理工作原理如附图7所示。
8
权利要求
一种基于嵌入式软件的细粒度检测方法,其特征在于由客户端和测试代理端两部分共同协作完成,所述客户端设置在开发机中,而测试代理端设置在目标机中,客户端和测试代理端通过网络进行通信,测试代理端所采集的样本数据通过网络实时发送给客户端进行分析,所述测试代理端包括用于采集和统计样本数据的内核模块和进行样本数据传递的测试代理模块,所述内核模块运行于嵌入式系统的内核空间中,实现数据包的采集和统计,并提供接口供测试代理模块进行配置和读取,所述测试代理模块运行于嵌入式系统的用户空间中,实现监听特定端口,提供测试服务,与发起连接的客户端进行交互,并且读取内核模块采集的数据,通过网络发送给客户端,所述客户端以Eclipse插件的形式运行于开发机中,并通过网络同测试代理模块进行交互,将控制命令或者经过交叉编译工具链编译的可执行文件发送给测试代理模块。
2.根据权利要求1所述的基于嵌入式软件的细粒度检测方法,其特征在于所述内核模 块包括NetFilterHook模块、端口匹配规则、控制模块、proc文件系统接口以及流量信息缓 存;所述NetFiIterHook模块是基于NetFiIter框架的扩展模块,建立在NetFilter的IP_ L0CAL_IN和IP_L0CAL_0UT两个HOOK点上,对进出本地网络端口的链路层数据包进行抓取 和分析,根据端口匹配规则分析相应的数据包,并根据分析结果更新流量信息缓存;所述端口匹配规则是一个查找表,支持动态的插入、删除和查找操作,记录着需要 NetFilterHook模块分析的数据包所对应的端口号;所述控制模块通过proc文件系统与用户空间进程进行交互,接收PID以及对应的端口 更新列表,经过匹配运算,向端口匹配规则中进行更新,以及维护用户进程Pid和所监控进 程Pid的关系表;所述proc文件系统接口是内核空间和用户空间进行交互的接口,内核模块通过它向 用户进程提供所需信息的查询接口 ;同时,用户空间对其进行写操作,把它做为内核模块的 配置接口 ;所述流量信息缓存属于内核的共享结构,是一个便于查找的哈希表结构,维护端口和 其流量信息的对应关系。
3.根据权利要求1所述的基于嵌入式软件的细粒度检测方法,其特征在于所述测试代 理模块包括Slave pool、连接分配器、工作线程与服务进程;所述Slave pool由多个服务进程组成,并记录它们的状态,以便连接分配器能够了解 并正确对socket连接进行分配,Slave pool通过Domain Socket同服务进程通信,传递 socket句柄,并了解它们的状态;所述连接分配器负责监听服务端口,接收连接请求并调用Slave pool的接口对请求进 行分配和管理。所述工作线程负责执行所有需要与内核交互的任务;所述服务进程负责与客户端进行交互,并且操作与工作线程共享的数据。
4.根据权利要求1所述的基于嵌入式软件的细粒度检测方法,其特征在于所述客户 端包括数据收集器和数据处理模块,所述数据收集器实现为客户端接收数据,并传送给数 据处理模块进行数据的解析,所述数据处理模块按照设定的格式对数据拆解分类,更新GUI 上相应的组件。
5.根据权利要求1所述的基于嵌入式软件的细粒度检测方法,其特征在于所述检测方 法如下在目标机上当用户操作GUI时,触发控制器的事件响应时,测试代理端接收命令和文 件并且执行,同时启动测试代理端的内核模块进行协议栈网络层的数据包采集,测试代理 端的测试代理模块分析统计数据包,再把相关数据发送到开发机的客户端,由客户端在开 发机上进行分析,从而实现对嵌入式软件网络使用进行交叉的检测。
全文摘要
本发明提供一种基于嵌入式软件的细粒度检测方法,由客户端和测试代理端两部分共同协作完成,所述客户端设置在开发机中,而测试代理端设置在目标机中,客户端和测试代理端通过网络进行通信,测试代理端所采集的样本数据通过网络实时发送给客户端进行分析,本发明通过客户端模块和测试代理端模块对嵌入式软件进行了实时在线的网络监测,并且能将监测粒度细化到指定进程的每一个端口,实现了细粒度的网络监测。
文档编号H04L29/06GK101944060SQ20101028151
公开日2011年1月12日 申请日期2010年9月10日 优先权日2010年9月10日
发明者刘发贵, 刘飞, 张杨, 李胜文, 贺南 申请人:华南理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1