CN108400909B - 一种流量统计方法、装置、终端设备和存储介质 - Google Patents

一种流量统计方法、装置、终端设备和存储介质 Download PDF

Info

Publication number
CN108400909B
CN108400909B CN201810147516.7A CN201810147516A CN108400909B CN 108400909 B CN108400909 B CN 108400909B CN 201810147516 A CN201810147516 A CN 201810147516A CN 108400909 B CN108400909 B CN 108400909B
Authority
CN
China
Prior art keywords
data
connection
transmission information
data packet
data transmission
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.)
Active
Application number
CN201810147516.7A
Other languages
English (en)
Other versions
CN108400909A (zh
Inventor
刘华星
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201810147516.7A priority Critical patent/CN108400909B/zh
Publication of CN108400909A publication Critical patent/CN108400909A/zh
Application granted granted Critical
Publication of CN108400909B publication Critical patent/CN108400909B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0876Network utilisation, e.g. volume of load or congestion level
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/14Session management
    • H04L67/146Markers for unambiguous identification of a particular session, e.g. session cookie or URL-encoding

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Environmental & Geological Engineering (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明公开了一种流量统计方法、装置、终端设备和存储介质,用以针对应用程序中内部运行的进程进行流量统计。所述流量统计方法,包括:捕获应用程序收发的数据包,所述数据包中携带有数据传输信息和数据大小信息;从存储的流量统计数据中查找所述数据传输信息对应的连接标识和每个连接标识对应数据包的数据大小信息,所述流量统计数据中关联存储有进程标识、进程关联的各个连接的连接标识、每个连接标识对应的数据传输信息,以及根据每个连接所捕获的数据包的数据大小信息而统计的数据量,每一个进程的数据量即为其关联的所有连接标识所对应的数据量;根据所述数据大小信息,将捕获的数据包的数据量更新到查找到的连接标识对应的数据量中。

Description

一种流量统计方法、装置、终端设备和存储介质
技术领域
本发明涉及网络通信技术领域,尤其涉及一种流量统计方法、装置、终端设备和存储介质。
背景技术
本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
在Android 2.2版本中加入了TrafficStats类来实现对流量统计的操作。目前在Android上对流量统计就是利用TrafficStats类实例来实现的,一般的通过getUidRxBytes和getUidTxBytes这两个函数来获取对应的收发数据。TrafficStats获取流量是通过获取解析/proc/net/xt_qtaguid/stats文件得到的。
但是,该流量统计方法为针对某个应用的流量统计,无法针对进程进行统计,因此,现有的流量统计粒度较粗,而如何针对应用程序内部运行的进程进行流量统计,成为现有技术亟待解决的技术问题之一。
发明内容
本发明实施例提供一种流量统计方法、装置、终端设备和存储介质,用以针对应用程序中内部运行的进程进行流量统计。
第一方面,提供一种流量统计方法,包括:
捕获应用程序收发的数据包,所述数据包中携带有数据传输信息和数据大小信息;
从存储的流量统计数据中查找所述数据传输信息对应的连接标识,所述流量统计数据中关联存储有进程标识、进程关联的各个连接的连接标识、每个连接标识对应的数据传输信息,以及根据每个连接所捕获的数据包的数据大小信息而统计的数据量,每一个进程的数据量即为其关联的所有连接标识所对应的数据量;
根据所述数据大小信息,将捕获的数据包的数据量更新到查找到的连接标识对应的数据量中。
上述方法中,在接收到数据包时,根据数据包中携带的数据传输信息查找该数据包归属的连接,并根据连接标识查找对应的进程,由此建立了数据包、连接标识和进程标识之间的关联,进而根据接收到的数据包大小信息更新相应连接的数据量,最后,统计进程包含的每一连接标识所对应的数据量总和得到该进程消耗的流量,由此实现了针对应用程序内部运行的进程的数据量统计。
可选地,本发明实施例提供的流量统计方法,还包括:
如果从存储的流量统计数据中未查找到所述数据传输信息对应的连接标识,则根据所述数据传输信息对应的连接标识在所述流量统计数据中查找对应的进程标识;
将所述数据传输信息、所述数据传输信息对应的连接标识以及与查找到的进程标识进行关联存储;
根据所述数据大小信息,将捕获的数据包的数据量更新到所述数据传输信息对应的连接标识所对应的数据量中。
可选地,所述数据传输信息包括源网络地址、源端口、目的网络地址和目的端口。
可选地,所述根据每个连接所捕获的数据包的数据大小信息而统计的数据量包括根据所述源网络地址确定出的接收数据量和发送数据量。
可选地,捕获应用程序收发的数据包,具体包括:
利用数据包捕获数据库libpcap工具捕获应用程序收发的数据包。
第二方面,提供一种流量统计装置,包括:
捕获单元,用于捕获应用程序收发的数据包,所述数据包中携带有数据传输信息和数据大小信息;
第一查找单元,用于从存储的流量统计数据中查找所述数据传输信息对应的连接标识,所述流量统计数据中关联存储有进程标识、进程关联的各个连接的连接标识、每个连接标识对应的数据传输信息,以及根据每个连接所捕获的数据包的数据大小信息而统计的数据量,每一个进程的数据量即为其关联的所有连接标识所对应的数据量;
第一更新单元,用于根据所述数据大小信息,将捕获的数据包的数据量更新到查找到的连接标识对应的数据量中。
可选地,所述流量统计装置,还包括:
第二查找单元,用于如果从存储的流量统计数据中未查找到所述数据传输信息对应的连接标识,则根据所述数据传输信息对应的连接标识在所述流量统计数据中查找对应的进程标识;
存储单元,用于将所述数据传输信息、所述数据传输信息对应的连接标识以及与查找到的进程标识进行关联存储;
第二更新单元,用于根据所述数据大小信息,将捕获的数据包的数据量更新到所述数据传输信息对应的连接标识所对应的数据量中。
可选地,所述数据传输信息包括源网络地址、源端口、目的网络地址和目的端口。
可选地,所述根据每个连接所捕获的数据包的数据大小信息而统计的数据量包括根据所述源网络地址确定出的接收数据量和发送数据量。
可选地,所述捕获单元,具体用于利用数据包捕获数据库libpcap工具捕获应用程序收发的数据包。
第三方面,提供一种终端设备,包括至少一个处理器、以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行上述任一方法所述的步骤。
第四方面,提供一种计算机可读介质,其存储有可由终端设备执行的计算机程序,当所述程序在终端设备上运行时,使得所述终端设备执行上述任一方法所述的步骤。
本发明实施例提供的流量统计方法、装置和介质,在捕获数据包之后,根据数据包中的数据传输信息确定该数据包对应的连接,进而根据连接标识对应到相应的进程,并根据数据包中的数据大小信息更新相应连接的数据量,最终,通过统计进程包含的每一连接所包含的数据量总和即可得到进程消耗的流量,由此实现了统计应用内运行的进程所消耗流量的目的。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为根据本发明实施方式的终端设备示意图;
图2为根据本发明实施例方式中数据包传输路径示意图;
图3为本发明中pcap文件结构示意图;
图4为本发明中数据包的文件头和数据报报头结构示意图;
图5为本发明中查看stat debug.txt文件的inode信息示意图;
图6为本发明中查看inode号码的示意图;
图7为本发明中查看ipv4下的socket对应的inode示意图;
图8为本发明中查看ipv6下的socket对应的inode示意图;
图9为本发明中查看qzone空间进程对应的pid示意图;
图10为本发明中查看空间进程fd文件夹下的文件连接情况示意图;
图11为本发明中进程、连接以及数据包之间的映射关系示意图;
图12为根据本发明实施方式的流量统计方法的实施流程示意图;
图13为根据本发明的流量统计方法统计得到的发送数据量和接收数据量示意图;
图14为根据本发明实施方式的另一流量统计方法示意图;
图15为本发明中TCP头的结构示意图;
图16为本发明实施例提供的流量统计装置的结构示意图。
具体实施方式
为了实现针对应用程序内运行的进程所消耗流量统计的目的,本发明实施例提供了一种流量统计方法、装置、终端设备和介质。
以下结合说明书附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明,并且在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
本发明实施例提供的流量统计方法可以应用于终端设备中。下面参照图1来描述根据本发明的终端设备10。图1显示的终端设备10仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图1所示,终端设备10的组件可以包括但不限于:至少一个处理器11、至少一个存储器12、连接不同***组件(包括存储器12和处理器11)的总线13。
总线13表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、***总线、处理器或者使用多种总线结构中的任意总线结构的局域总线。
存储器12可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)121和/或高速缓存存储器122,还可以进一步包括只读存储器(ROM)123。
存储器12还可以包括具有一组(至少一个)程序模块124的程序/实用工具125,这样的程序模块124包括但不限于:操作***、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
终端设备10也可以与一个或多个外部设备14(例如键盘、指向设备等)通信,还可与一个或者多个使得用户能与终端设备10交互的设备通信,和/或与使得该终端设备10能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口15进行。并且,终端设备10还可以通过网络适配器16与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器16通过总线13与用于终端设备10的其它模块通信。应当理解,尽管图中未示出,可以结合终端设备10使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、RAID***、磁带驱动器以及数据备份存储***等。
传统的流量统计方式TrafficStats是在传输层捕获数据包,这使得在统计应用程序消耗的流量时会统到本地环路接口(LO,loopback)的流量信息。比如在播放本地视频时需要建立中间代理对视频数据转发,这样就会产生LO流量,而这部分流量并不是应用真是的对外流量,因此,对LO流量的统计使得现有的应用流量统计结果存在一定的误差。为了避免统计到本地流量,提高流量统计结果的准确性,本发明实施例中利用libpcap(PacketCapture Library,数据包捕获数据库)方式捕获数据包,libpcap捕获数据包在MAC层,由于本地数据包的传输不经过MAC层,因此libpcap不会捕获本地数据包。如图2所示,其为TrafficStats和libpcap数据包传输路径示意图。
本发明实施例中采用了libpcap捕获数据包,因此捕获的数据包的报文结构符合pcap文件结构。如图3所示,其为pcap文件结构。其中,pcap文件头占24个字节且唯一,即一个pcap文件中只有pcap文件头。Pcap数据报报头占16字节,其后面紧跟着数据包。数据包中又分为三层,即以太网数据帧(占据14个字节)、IP包头(一般为20字节)、TCP/UDP(传输控制协议/用户数据报协议)。
捕获数据包过程中获取到的都是一个个数据报,为了统计应用程序消耗的流量,本发明实施例中,可以对数据报报头结构进行分析。对于数据报报文,其定义结构如下:
Figure BDA0001579200450000071
数据包的文件头和数据报报头结构如图4所示,其中ts为时间戳,其表示抓包时间,共占用8字节,4字节表示秒数,4字节表示微秒数;caplen为抓包长度,其表示保存下来的包长度,共占用4字节;len为实际长度,其表示数据报的真实长度,共占用4字节,如果文件中保存的不是完整数据包,可能比caplen大。例如,实际上有一个包长度是1500bytes(Len=1500),但是因为在Global Header的snaplen=1300有限制,所以只能抓取这个包的前1300个字节,这个时候,caplen=1300,而len=1500。这样,通过记录各个报文的报头中len字段就可以确定每个报文的大小。
本发明实施例提供的流量统计方法适用于Linux***和Android***,在Linux***中存在着一切皆文件的概念,所以对于网络通信,例如net网络,socket通信等均可看做为一个个文件。每个文件都存在储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做索引节点(inode),每一个文件都有对应的inode,里面包含了与该文件有关的一些信息,具体地,其中包含以下信息:文件的字节数;文件拥有者的User ID;文件的Group ID;文件的读、写、执行权限、文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间;链接数,即有多少文件名指向这个inode;文件数据block的位置。
具体实施时,可以通过stat命令,查看某个文件的inode信息,例如,statexample.txt,如图5所示,其为利用stat命令查看stat debug.txt文件的inode信息示意图。除了文件名以外的所有文件信息,都存在于inode之中。每个inode都有一个号码,操作***用inode号码来识别不同的文件。Unix/Linux***内部不使用文件名,而使用inode号码来识别文件。对于***来说,文件名只是inode号码便于识别的别称或者绰号。从用户角度来看,用户通过文件名,打开文件。实际上,***内部该过程可以分为如下三步:首先,***找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block读出数据。使用ls-i命令,可以看到文件名对应的inode号码:例如ls -i example.txt,如图6所示,其为使用ls-i example.txt命令查看inode号码的示意图。
由此可知,由于每个连接可以看成一个文件,每个文件又有唯一标识的inode号,因此,可以通过找到每个连接的inode号作为该连接的唯一标识,对于一个tcp连接,通过ls-i example.txt命令可以看到其相关的inode,如图7和图8所示,其分别为查看ipv4和ipv6下的socket对应的inode示意图。
如图9所示,其为查看qzone空间进程对应的pid示意图,qzone空间进程对应的pid为20465。
在linux***中,/proc/pid/fd目录包含了进程打开的每一个文件的连接,例如,查看空间进程fd文件夹下的文件连接情况,可以看到一些socket连接,其中的一串数字,即为该socket的inode号,如图10所示。
由此可以确定,每个报文就是一个packet,多个packet可以合并为一个packetlist,根据packet中的sip(源ipv4地址)/dip(目的ipv4地址)或者sip6(源ipv6地址)/dip6(目的ipv6地址)来确认报文的发送还是接收到的,进而将packet放到接收、发送队列,对应于Connection中的sent_packets(发送数据包)/recv_packets(接收数据包)。对于每个packet归属于那个connection(连接)可以通过查看packet的收发端口以及收发IP地址确定,可以将源IP、目的IP、源端口和目的端口均一致的数据包对应到同一个连接中国。Connection与process(进程)之间可以通过inode进行关联,因为每个connection就是一个个socket,有其对应的inode,可以构建一个map(映射)对来记录该map对,其关键字段(key)可以设置为“本地地址:本地端口-远端地址:远端端口”,例如,10.66.92.150:43054-14.215.140.65:80,关键值(value)设置为inode,这样,就可以通过connection的地址和端口信息对应到该connection的inode了,如图11所示,其为process(进程)、connection(连接)以及packet(数据包)之间的映射关系示意图,其中,process由connlist(连接列表)组成,connlist包含多个connection(连接),每一连接有packlist(数据包列表)组成,每一packlist由多个packlistnode(包列表节点),每一packlistnode对应于一个packet(数据包)。
基于此,为了对应用程序消耗的流量进行统计,具体实施时,在开启流量统计进程之后,终端设备可以表1所示的流量统计表来维护存储的流量统计数据:
表1
Figure BDA0001579200450000091
Figure BDA0001579200450000101
终端设备存储的流量统计数据中关联存储有进程标识、进程关联的各个连接的连接标识、每个连接标识对应的数据传输信息,以及根据每个连接所捕获的数据包的数据大小信息而统计的数据量,其中,进程标识用于标识进程,其可以为进程对应的PID(进程标识符),连接标识用于标识连接,其可以为连接的inode,数据传输信息用于标识数据包,其可以为数据包的map对,即“本地地址:本地端口-远端地址:远端端口”,该map对中包含的信息可以从捕获的数据包中提取,数据量用于表示捕获的数据包的大小,其具体可以为数据报报头中len字段的值。
基于此,本发明实施例提供了一种流量统计方法,如图12所示,其为本发明实施例提供的流量统计方法的实施流程示意图,可以包括以下步骤:
S121、捕获应用程序收发的数据包,所述数据包中携带有数据传输信息和数据大小信息。
具体实施时,由于本发明实施例中利用libpcap工具捕获数据包,libpcap工具捕获数据包需要root权限,因此,在执行本发明实施例之前需要开启root权限。之后,开启pcap捕获数据包,同时需要设置对应的传输层ipv4/ipv6以及网络层tcp/udp的回调函数,即针对不同的层设置其相应的解析协议,用于对捕获的数据包进行解析。这样,在捕获到数据包之后可以调用设置的函数解析捕获的数据包,以提取统计流量所需的相关信息。本发明实施例中,在捕获并解析数据包之后,可以提取数据包中携带的数据传输信息和数据大小信息。其中,数据传输信息可以为上述介绍的map对,即“本地地址:本地端口-远端地址:远端端口”,该map对可以确定一个连接,进而可以与连接的inode关联。
S122、从存储的流量统计数据中查找所述数据传输信息对应的连接标识。
根据从捕获的数据包中提取的map对,从流量统计数据中查找该map对对应的连接标识,以提取的map对为P113为例,可以确定其对应的连接标识为C11。
S123、根据捕获的数据包中携带的数据大小信息,将捕获的数据包的数据量更新到查找到的连接标识对应的数据量中。
进而,根据数据包中携带的数据大小信息更新查找到的连接标识对应的数据量,本例中,即更新C11对应的数据量。
具体实施时,重复执行上述步骤,直至接收到外部消息信号退出循环为止。例如,在接收到流量统计进程结束指令时,退出流量统计进程,针对记录的每一进程,统计表1所示的流量统计数据中,该进程包含的每一连接标识所对应的数据量之和即为该进程消耗的流量。
在步骤S122中,如果在流量统计数据中没有匹配到map对所对应的连接标识,则根据所述数据传输信息对应的连接标识在所述流量统计数据中查找对应的进程标识;将所述数据传输信息、所述数据传输信息对应的连接标识以及与查找到的进程标识进行关联存储;根据所述数据大小信息,将捕获的数据包的数据量更新到所述数据传输信息对应的连接标识所对应的数据量中。
具体实施时,如果在流量统计数据中没有匹配到map对所对应的连接标识,则构建连接对象,并根据从捕获的数据包中提取的数据传输信息确定连接对象的连接标识,以建立捕获的数据包与连接之间的关联关系。进一步地,可以根据连接标识与进程标识之间的对应关系可以确定构建的连接对象对应的进程标识,从流量统计数据中查找相应的进程标识,将从捕获的数据包中提取的数据传输信息、该数据传输信息对应的连接标识和查找到的进程标识进行关联存储,并根据捕获的数据包中携带的数据大小信息,将捕获的数据包的数据量更新到所述数据传输信息对应的连接标识所对应的数据量中。
具体实施时,如果从建立的流量统计数据中未查找到连接标识对应的进程标识,则获取该连接标识对应的进程标识,例如,利用inode查找进程的名称和PID等信息,根据查找到的信息构建进程对象,并建立构建的进程对象、之前构建的连接对象及从捕获的数据包中提取的数据传输信息之间的关联关系并将其加入到流量统计数据中,之后再根据捕获的数据包中携带的数据大小信息,更新其对应的数据量。
为了提高流量统计结果的精度,本发明实施例中,还可以根据源地址是否为本地地址区分捕获的数据包为本地发送给远端的数据包还是远端发送给本地的数据包,这样,可以进一步细化流量统计粒度,区分出进程的发送数据量和接收数据量。
具体地,在捕获到数据包之后,如果所述源网络地址是本地网络地址,则确定捕获的数据包为向远端发送的数据包;如果所述源网络地址不是本地网络地址,则确定捕获的数据包为接收到的数据包,进一步地,如果确定捕获的数据包为向远端发送的数据包,则根据所述数据大小信息,更新所述流量统计数据中所述连接标识对应的发送数据量;如果确定捕获的数据包为接收的数据包,则根据所述数据大小信息,更新所述流量统计数据中所述连接标识对应的接收数据量。其中,源网络地址可以为源IP地址,目的网地址可以为目的IP地址,如图13所示,其为根据本发明实施例提供的流量统计方法统计得到的发送数据量(sent_flow)和接收数据量(recv_flow)。
为了更好地理解本发明实施例,以下结合图14所示的流程,对本发明实施例的具体实施过程进行说明。如图14所示,可以包括以下步骤:
S141、判断是否为具有root权限的用户启动流量统计进程,如果是,执行步骤A142,否则,流程结束。
S142、利用libpcap捕获数据包。
具体地,可以利用pcap_open_live开启pcap捕获数据包。
S143、分别设置ipv4和ipv6、tcp以及udp报文的解析函数。
本步骤中,在开启了pcap捕获数据包之后,需要设置传输层ipv4和ipv6以及网络层tcp/udp的解析函数,这样,在捕获了数据包之后,可以利用设置的解析函数对数据包进行解析。
S144、通过pcap_get_selectable_fd设置非阻塞模式获取报文。
S145、判断loop_operate_socket的值是否为TRUE,如果是,则执行步骤S146,否则,执行步骤S1414。
本发明实施例中,在检测到流量统计进程开启指令时开始捕获数据包,具体地,在检测到流量统计进程开启指令时,loop_operate_socket的值被设置为TRUE,在检测到流量统计进程结束指令时,loop_operate_socket的值被设置为False。
S146、调用设置的解析函数解析捕获的数据包。
具体实施时,根据捕获的数据包的连接方式调用相关的解析函数,例如,对于Linux本地连接(DLT_LINUX_SLL)、以太网连接(DLT_EN10MB)分别调用相应的解析函数进行解析处理。或者,根据数据链接IP类型调用相关的ipv4或者ipv6解析函数来解析IP层数据,ipv4或者ipv6的解析函数会解析发送端和接收端的IP地址并存储。或者,根据网络层类型来调用tcp/udp的解析函数来解析网络层数据,以获得捕获的数据包的源端口和目的端口。即在本步骤中,在传输层,利用ipv4或者ipv6解析函数对IP头进行解析,可以获得该数据包的源IP地址和目的IP地址,在网络层,利用tcp/udp解析函数对数据包的TCP头进行解析,可以获得该数据包的源端口和目的端口等信息。如图15所示,其为TCP头的结构示意图。
S147、利用解析获得的数据构建packet对象。
本步骤中,利用步骤S146解析获得的源地址、目的地址、源端口和目的端口构建packet对象。
S148、利用构建的packet对象查找流量统计数据中是否存在对应的连接,如果是,则执行步骤S149,如果否,则执行步骤S1410。
S149、将构建的packet对象加入到查找到的连接所包含的数据包列表中,并根据数据包中携带的数据大小信息更新查找到的连接对应的数据量,返回执行步骤S145。
如果利用构建的packet对象在流量统计数据中查找到其对应的连接,则根据数据报报头中的len字段指示的数据大小信息更新该连接对应的数据量。
S1410、构建新的连接对象,建立构建的连接与构建的packet对象之间的关联关系,并根据构建的packet对象确定构建的连接对象的连接标识。
具体地,如果利用构建的packet对象在流量统计数据中未查找到其对应的连接,则构建新的连接对象,并根据构建的packet对象确定该连接对象的inode,建立构建的连接与构建的packet对象之间的关联关系,即将构建的packet对象加入到该连接对应的数据包列表中,利用数据包中携带的数据大小信息更新该连接对应的数据量。
具体实施时,可以读取并解析/proc/net/tcp以及/proc/net/tcp6文件,并按照“本地地址:本地端口-远端地址:远端端口”为key,inode为value的方式存储数据。然后,利用该连接的hashstring(本地地址:本地端口-远端地址:远端端口)找到对应的inode,进而可以利用inode在流量统计数据中查找其对应的process。
S1411、判断流量统计数据中是否存在该inode对应的进程,如果是,则执行步骤S1413,否则,执行步骤S1412。
S1412、利用inode,查找其对应的进程标识,利用查找到的进程标识构建进程对象并添加至流量统计数据中。
S1413、将构建的连接添加至其对应的进程包含的连接列表中,根据数据包中携带的数据大小信息更新其对应的数据量,并返回执行步骤S145。
本步骤中,可以将所捕获的数据包的数据包标识、构建的连接对应的连接标识以及构建的进程对应的进程标识添加至流量统计数据中,并根据数据包中携带的数据大小信息更新其对应的数据量。
S1414、针对每一进程,统计所述流量统计数据中该进程包含的每一连接标识所对应的数据量总和得到该进程消耗的流量。
本步骤中,在监听到外部的触发退出指令后,可以针对流量统计数据中包含的每一进程统计其包含的所有连接的数据量总和得到该进程消耗的流量。
本发明实施例提供的流量统计方法,可以单独统计应用中某些进程的流量消耗,例如,对于在微信内部运行的小程序,按照现有的流量统计方统计流量时,只能统计到应用程序微信消耗的流量,无法统计小程序消耗的流量,而利用本发明实施例提供的流量统计方法可以统计小程序消耗的流量。
本发明实施例提供的流量统计方法中,在捕获数据包之后,根据数据包中的数据传输信息确定该数据包对应的连接,进而根据连接标识对应到相应的进程,并根据数据包中的数据大小信息更新相应连接的数据量,最终,通过统计进程包含的每一连接所包含的数据量总和即可得到进程消耗的流量,由此实现了统计应用内包含的进程所消耗流量的目的。
基于同一发明构思,本发明实施例中还提供了一种流量统计装置,由于上述装置解决问题的原理与上述的流量统计方法相似,因此上述装置及设备的实施可以参见方法的实施,重复之处不再赘述。
如图16所示,其为本发明实施例提供的流量统计装置的结构示意图,包括:
捕获单元161,用于捕获应用程序收发的数据包,所述数据包中携带有数据传输信息和数据大小信息;
第一查找单元162,用于从存储的流量统计数据中查找所述数据传输信息对应的连接标识,所述流量统计数据中关联存储有进程标识、进程关联的各个连接的连接标识、每个连接标识对应的数据传输信息,以及根据每个连接所捕获的数据包的数据大小信息而统计的数据量,每一个进程的数据量即为其关联的所有连接标识所对应的数据量;
第一更新单元163,用于根据所述数据大小信息,将捕获的数据包的数据量更新到查找到的连接标识对应的数据量中。
可选地,所述流量统计装置,还包括:
第二查找单元,用于如果从存储的流量统计数据中未查找到所述数据传输信息对应的连接标识,则根据所述数据传输信息对应的连接标识在所述流量统计数据中查找对应的进程标识;
存储单元,用于将所述数据传输信息、所述数据传输信息对应的连接标识以及与查找到的进程标识进行关联存储;
第二更新单元,用于根据所述数据大小信息,将捕获的数据包的数据量更新到所述数据传输信息对应的连接标识所对应的数据量中。
可选地,所述数据传输信息包括源网络地址、源端口、目的网络地址和目的端口。
可选地,所述根据每个连接所捕获的数据包的数据大小信息而统计的数据量包括根据所述源网络地址确定出的接收数据量和发送数据量。
可选地,所述捕获单元,具体用于利用数据包捕获数据库libpcap工具捕获应用程序收发的数据包。
为了描述的方便,以上各部分按照功能划分为各模块(或单元)分别描述。当然,在实施本发明时可以把各模块(或单元)的功能在同一个或多个软件或硬件中实现。
本发明实施例还提供了一种计算机可读存储介质,存储为执行上述处理器所需执行的计算机可执行指令,其包含用于执行上述处理器所需执行的程序。
在一些可能的实施方式中,本发明提供的流量统计方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述描述的根据本发明各种示例性实施方式的流量统计方法中的步骤,例如,可以执行如图12中所示的步骤S121、捕获应用程序收发的数据包,所述数据包中携带有数据传输信息和数据大小信息,步骤S122、从存储的流量统计数据中查找所述数据传输信息对应的连接标识,所述流量统计数据中关联存储有进程标识、进程关联的各个连接的连接标识、每个连接标识对应的数据传输信息,以及根据每个连接所捕获的数据包的数据大小信息而统计的数据量,每一个进程的数据量即为其关联的所有连接标识所对应的数据量,步骤S123、根据所述数据大小信息,将捕获的数据包的数据量更新到查找到的连接标识对应的数据量中。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
本发明的实施方式的用于so函数的hook的程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在计算设备上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。
此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (12)

1.一种流量统计方法,其特征在于,包括:
捕获应用程序收发的数据包,所述数据包中携带有数据传输信息和数据大小信息;
从存储的流量统计数据中查找所述数据传输信息对应的连接标识,所述流量统计数据中关联存储有进程标识、进程关联的各个连接的连接标识、每个连接标识对应的数据传输信息,以及根据每个连接所捕获的数据包的数据大小信息而统计的数据量,每一个进程的数据量即为其关联的所有连接标识所对应的数据量;
若在存储的流量统计数据中未查找到所述数据传输信息的连接标识对应的进程标识,则获取该连接标识对应的进程标识,并构建进程对象,将获取的进程标识及从捕获的数据包中提取的数据传输信息、该数据传输信息的连接标识进行关联存储;
根据所述数据大小信息,将捕获的数据包的数据量更新到所述数据传输信息的连接标识对应的数据量中;
对于流量统计数据中的每个进程,确定与该进程关联的各个连接的连接标识,并将与该进程关联的所有连接标识所对应的数据量的总和,作为该进程消耗的流量。
2.如权利要求1所述的方法,其特征在于,还包括:
如果从存储的流量统计数据中未查找到所述数据传输信息对应的连接标识,则根据所述数据传输信息对应的连接标识在所述流量统计数据中查找对应的进程标识;
将所述数据传输信息、所述数据传输信息对应的连接标识以及与查找到的进程标识进行关联存储;
根据所述数据大小信息,将捕获的数据包的数据量更新到所述数据传输信息对应的连接标识所对应的数据量中。
3.如权利要求1所述的方法,其特征在于,所述数据传输信息包括源网络地址、源端口、目的网络地址和目的端口。
4.如权利要求3所述的方法,其特征在于,所述根据每个连接所捕获的数据包的数据大小信息而统计的数据量包括根据所述源网络地址确定出的接收数据量和发送数据量。
5.如权利要求1~4任一权利要求所述的方法,其特征在于,捕获应用程序收发的数据包,具体包括:
利用数据包捕获数据库libpcap工具捕获应用程序收发的数据包。
6.一种流量统计装置,其特征在于,包括:
捕获单元,用于捕获应用程序收发的数据包,所述数据包中携带有数据传输信息和数据大小信息;
第一查找单元,用于从存储的流量统计数据中查找所述数据传输信息对应的连接标识,所述流量统计数据中关联存储有进程标识、进程关联的各个连接的连接标识、每个连接标识对应的数据传输信息,以及根据每个连接所捕获的数据包的数据大小信息而统计的数据量,每一个进程的数据量即为其关联的所有连接标识所对应的数据量;若在存储的流量统计数据中未查找到所述数据传输信息的连接标识对应的进程标识,则获取该连接标识对应的进程标识,并构建进程对象,将获取的进程标识及从捕获的数据包中提取的数据传输信息、该数据传输信息的连接标识进行关联存储;
第一更新单元,用于根据所述数据大小信息,将捕获的数据包的数据量更新到所述数据传输信息的连接标识对应的数据量中;对于流量统计数据中的每个进程,确定与该进程关联的各个连接的连接标识,并将与该进程关联的所有连接标识所对应的数据量的总和,作为该进程消耗的流量。
7.如权利要求6所述的装置,其特征在于,还包括:
第二查找单元,用于如果从存储的流量统计数据中未查找到所述数据传输信息对应的连接标识,则根据所述数据传输信息对应的连接标识在所述流量统计数据中查找对应的进程标识;
存储单元,用于将所述数据传输信息、所述数据传输信息对应的连接标识以及与查找到的进程标识进行关联存储;
第二更新单元,用于根据所述数据大小信息,将捕获的数据包的数据量更新到所述数据传输信息对应的连接标识所对应的数据量中。
8.如权利要求6所述的装置,其特征在于,所述数据传输信息包括源网络地址、源端口、目的网络地址和目的端口。
9.如权利要求8所述的装置,其特征在于,所述根据每个连接所捕获的数据包的数据大小信息而统计的数据量包括根据所述源网络地址确定出的接收数据量和发送数据量。
10.如权利要求6~9任一权利要求所述的装置,其特征在于,
所述捕获单元,具体用于利用数据包捕获数据库libpcap工具捕获应用程序收发的数据包。
11.一种终端设备,其特征在于,包括至少一个处理器、以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行权利要求1~5任一权利要求所述方法的步骤。
12.一种计算机可读介质,其特征在于,其存储有可由终端设备执行的计算机程序,当所述程序在终端设备上运行时,使得所述终端设备执行权利要求1~5任一所述方法的步骤。
CN201810147516.7A 2018-02-12 2018-02-12 一种流量统计方法、装置、终端设备和存储介质 Active CN108400909B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810147516.7A CN108400909B (zh) 2018-02-12 2018-02-12 一种流量统计方法、装置、终端设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810147516.7A CN108400909B (zh) 2018-02-12 2018-02-12 一种流量统计方法、装置、终端设备和存储介质

Publications (2)

Publication Number Publication Date
CN108400909A CN108400909A (zh) 2018-08-14
CN108400909B true CN108400909B (zh) 2020-10-02

Family

ID=63095582

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810147516.7A Active CN108400909B (zh) 2018-02-12 2018-02-12 一种流量统计方法、装置、终端设备和存储介质

Country Status (1)

Country Link
CN (1) CN108400909B (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109450656A (zh) * 2018-12-30 2019-03-08 北京世纪互联宽带数据中心有限公司 一种计费流量图生成方法及装置
CN109889401B (zh) * 2019-01-22 2021-03-16 金蝶软件(中国)有限公司 流量统计方法、装置、计算机设备和存储介质
CN110071852B (zh) * 2019-04-22 2023-04-14 超越科技股份有限公司 基于Linux操作***的程序网络流量监控方法及***
CN110868360B (zh) * 2019-11-19 2023-04-28 深圳市网心科技有限公司 流量统计方法、电子设备、***及介质
CN111181806B (zh) * 2019-12-25 2022-02-25 深圳市丰润达科技有限公司 全网流量分析技术的实现方法、装置及可读存储介质
CN113448794A (zh) * 2020-03-26 2021-09-28 青岛海信传媒网络技术有限公司 进程定位方法、装置、设备及计算机存储介质
CN111988239B (zh) * 2020-08-21 2022-07-15 哈尔滨工业大学 一种用于Android应用的软件纯净流量获取方法
CN112260889B (zh) * 2020-09-28 2022-03-11 中孚安全技术有限公司 一种基于Linux的进程流量监控方法、***及设备
CN112787828B (zh) * 2021-01-08 2023-03-21 重庆创通联智物联网有限公司 一种应用程序的流量统计方法、设备、移动电子设备
CN113079151B (zh) * 2021-03-26 2023-05-16 深信服科技股份有限公司 一种异常处理方法、装置、电子设备及可读存储介质
CN114584490B (zh) * 2022-03-25 2024-04-09 阿里巴巴(中国)有限公司 数据传输检测方法以及装置
CN115174446B (zh) * 2022-07-21 2023-11-03 天翼云科技有限公司 一种网络流量统计的方法、装置及电子设备
CN116389322B (zh) * 2023-06-02 2023-08-15 腾讯科技(深圳)有限公司 流量数据处理方法、装置、计算机设备和存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106921637B (zh) * 2015-12-28 2020-02-14 华为技术有限公司 网络流量中的应用信息的识别方法和装置
CN107547290A (zh) * 2016-06-27 2018-01-05 腾讯科技(深圳)有限公司 流量检测方法和装置

Also Published As

Publication number Publication date
CN108400909A (zh) 2018-08-14

Similar Documents

Publication Publication Date Title
CN108400909B (zh) 一种流量统计方法、装置、终端设备和存储介质
US9305055B2 (en) Method and apparatus for analysing data packets
US10691748B2 (en) Methods and apparatus to process call packets collected in a communications network
JP5167501B2 (ja) ネットワーク監視システムとその動作方法
US9210090B1 (en) Efficient storage and flexible retrieval of full packets captured from network traffic
JP2020113924A (ja) モニタリングプログラム,プログラマブルデバイス及びモニタリング方法
JP2018531527A6 (ja) ネットワークトラフィックにおけるアプリケーション情報を識別するための方法および装置
JP2018531527A (ja) ネットワークトラフィックにおけるアプリケーション情報を識別するための方法および装置
US20130191890A1 (en) Method and system for user identity recognition based on specific information
WO2016082371A1 (zh) 一种基于ssh协议的会话解析方法及***
CN113055127B (zh) 数据报文去重与传输方法、电子设备及存储介质
CN107347062A (zh) 一种日志数据处理的方法、电子设备和可读存储介质
US10616378B2 (en) Adaptive session intelligence extender
CN107666486A (zh) 一种基于报文协议特征的网络数据流恢复方法及***
CN114389792A (zh) 一种web日志nat前后关联方法及***
CN115499230A (zh) 网络攻击检测方法和装置、设备及存储介质
RU2668394C2 (ru) Способ и система для сбора пакетов, сетевое устройство и центр управления сетью
van De Wiel et al. Enabling non-expert analysis of large volumes of intercepted network traffic
KR102423039B1 (ko) 대용량 네트워크 모니터링을 위한 실시간 패킷 데이터 저장 방법 및 장치
US10419351B1 (en) System and method for extracting signatures from controlled execution of applications and application codes retrieved from an application source
CN114697205B (zh) 日志处理方法及装置
CN117061394A (zh) 基于eBPF的容器网络TCP连接时延监测方法和装置
WO2023125056A1 (zh) 网络数据的控制方法、装置和存储介质及电子设备
CN111367686A (zh) 业务接口的调用方法及装置、计算机设备、存储介质
CN108076070B (zh) 一种fasp协议阻断方法、装置及分析***

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