一种AndroidAPP流量统计方法及系统技术方案

技术编号:38406026 阅读:9 留言:0更新日期:2023-08-07 11:15
本发明专利技术公开了一种Android APP流量统计方法及系统,包括编写eBPF程序,eBPF程序用于收集Android APP流量统计信息,编译eBPF程序形成BPF字节码,BPF字节码对应BPF程序,基于BPF系统调用的方式将BPF字节码加载到内核,在BPF程序中创建一个Map;eBPF程序在内核态以BPF字节码的形式运行,内核具有多个hook点,基于hook点对BPF程序进行事件源配置,从而当hook点上的事件发生时,执行BPF程序,基于JIT方式将内核中的BPF字节码转换为机器码后,通过BPF虚拟机执行机器码以获取Android APP流量统计信息,将Android APP流量统计信息保存至Map中。本发明专利技术可以准确的统计每辆车消耗的流量以方便客户随时查询自己的车辆流量消耗情况的问题。问题。问题。

【技术实现步骤摘要】
一种Android APP流量统计方法及系统


[0001]本专利技术涉及车联网
,具体涉及一种Android APP流量统计方法及系统。

技术介绍

[0002]随着智能交通的发展,车联网逐渐普及,用户的规模不断扩大,市场需求不断增长,车联网市场前景一片光明,车辆互联上网是一项必不可少的功能,车载通过4G/5G、TBOX互联入网,开发成多用途多功能集成一体的车联网智能终端。
[0003]车联网智能终端对于上网流量的统计是一个必不可少的功能,该功能需要准确统计每辆车消耗的流量以方便客户随时查询自己的车辆流量消耗情况。
[0004]传统的座舱系统中Android侧流量统计方式为:
[0005]方式一,通过获取/proc/net/dev下文件获取相应设备以及对应接收和发送的数据包计算收发流量;
[0006]方式二,根据/proc/uid_stat/{uid}/tcp_rcv和/proc/uid_stat/{uid}/tcp_snd中应用下载和上传流量记录来统计流量;
[0007]方式三,Android流量统计TrafficStats,TrafficStats统计包含所有接口的字节数的发送和接收,网络包的发送和接收,并可以统计每个uid的传输,其中底层通过读取
[0008]/proc/net/xt_qtaguid/stats后对内容进行解析来实现rx_bytes(接收数据)和tx_bytes(传输数据)所包含的TCP和UDP的流量统计;
[0009]方式四,Android 9以后eBPF流量的新的统计方案,包括:eBPF网络流量工具结合使用内核和用户空间监控自上次设备启动以来设备上的网络使用情况。它还提供了附加功能,例如套接字标记、分离前台/后台流量和按uid设置防火墙,以根据手机状态阻止应用程序访问网络。
[0010]针对上述传统的座舱系统中Android侧流量统计,均存在或多或少的问题,
[0011]对于方式一,只能统计整个系统流量,不能区分单个应用APP流量;
[0012]对于方式二,可以根据uid区分单个app流量,统计该app的所有流量,需要root权限,并不是每个产商都配置了/proc/uid_stat,这个文件夹不通用,因此方法通用性差;
[0013]对于方式三,根据网卡区分app、线程流量,不是每个产商都配置有这个文件,因此方法不通用;
[0014]对于方式四,Android9以后修改变更eBPF方式统计流量,可以统计整个系统流量,也可以根据uid统计app流量。

技术实现思路

[0015]本专利技术的目的旨在至少在一定程度上解决上述的技术问题之一。
[0016]为此,本专利技术的第一个目的在于提出一种Android APP流量统计方法,以准确统计每辆车消耗的流量以方便客户随时查询自己的车辆流量消耗情况的问题。
[0017]本专利技术的第二个目的在于提出一种Android APP流量统计系统。
[0018]本专利技术的第三个目的在于提出一种电子设备。
[0019]本专利技术的第四个目的在于提出一种非暂时性计算机可读存储介质。
[0020]为达到上述目的,本专利技术第一方面实施例提出的一种Android APP流量统计方法,包括:
[0021]编写eBPF程序,所述eBPF程序用于收集Android APP流量统计信息;
[0022]编译所述eBPF程序形成BPF字节码,所述BPF字节码对应BPF程序;
[0023]基于BPF系统调用的方式将所述BPF字节码加载到内核,在所述BPF程序中创建一个Map;其中,所述eBPF程序在内核态以所述BPF字节码的形式运行,所述内核具有多个hook点,基于所述hook点对所述BPF程序进行事件源配置,从而当所述hook点上的事件发生时,执行所述BPF程序;
[0024]基于JIT方式将所述内核中的所述BPF字节码转换为机器码后,通过BPF虚拟机执行所述机器码以获取所述Android APP流量统计信息;
[0025]将所述Android APP流量统计信息保存至所述Map中。
[0026]根据本专利技术的一个实施例,所述编写eBPF程序包括:在Netd模块中通过C代码编写所述eBPF程序。
[0027]根据本专利技术的一个实施例,编译所述eBPF程序形成BPF字节码包括:基于Clang/LLVM编译所述eBPF程序形成BPF字节码。
[0028]根据本专利技术的一个实施例,所述在Netd模块中通过C代码编写所述eBPF程序之后还包括:基于clang编译器将编写后的所述eBPF程序编译成二进制字节码。
[0029]根据本专利技术的一个实施例,所述基于BPF系统调用的方式将所述BPF字节码加载到内核,在所述BPF程序中创建一个Map包括:
[0030]基于bpfloader及libbpf_android模块将编译后的置于system/etc/bpf的所述二进制字节码加载到内核libbpf_android库;
[0031]调用createMaps创建bpf map容器;
[0032]加载bpf目标文件的接口,调用bpf_prog_load加载bpf程序到内核,调用bpf_obj_pin将所述bpf程序固定到/sys/fs/bpf文件节点;其中,基于所述内核libbpf_android库生成用于封装bpf的系统调用函数的libbpf.so。
[0033]根据本专利技术的一个实施例,所述调用bpf_obj_pin将所述bpf程序固定到
[0034]/sys/fs/bpf文件节点之后还包括:
[0035]根据所述内核收到所述eBPF加载请求时,对字节码进行校验。
[0036]根据本专利技术的一个实施例,所述通过BPF虚拟机执行所述机器码以获取所述Android APP流量统计信息包括:
[0037]调用所述eBPF程序的处理函数,所述eBPF程序被加载进所述内核且挂载到多个hook点上对应的hook点;
[0038]持续监测多个hook点上的事件是否发生;当所述事件发生后,所述eBPF程序被挂载的所述hook点调用被触发以触发eBPF执行函数;
[0039]其中,所述eBPF程序被触发执行后,存储发生的所述事件和所述Android APP流量统计信息;所述Android APP流量统计信息为被用户空间的程序通过系统调用读取的struct Maps中的数据。
[0040]为达到上述目的,本专利技术第二方面实施例提出一种Android APP流量统计系统,包括:
[0041]编写模块,用于编写eBPF程序,所述eBPF程序用于收集Android APP流量统计信息;
[0042]编译模块,用于编译所述eBPF程序形成BPF字节码,所述BPF字节码对应BPF程序;
[0043]加载模块,用于基于BPF系统调用的方式将所述BPF字节码加载到内核,本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种Android APP流量统计方法,其特征在于,包括:编写eBPF程序,所述eBPF程序用于收集Android APP流量统计信息;编译所述eBPF程序形成BPF字节码,所述BPF字节码对应BPF程序;基于BPF系统调用的方式将所述BPF字节码加载到内核,在所述BPF程序中创建一个Map;其中,所述eBPF程序在内核态以所述BPF字节码的形式运行,所述内核具有多个hook点,基于所述hook点对所述BPF程序进行事件源配置,从而当所述hook点上的事件发生时,执行所述BPF程序;基于JIT方式将所述内核中的所述BPF字节码转换为机器码后,通过BPF虚拟机执行所述机器码以获取所述Android APP流量统计信息;将所述Android APP流量统计信息保存至所述Map中。2.根据权利要求1所述的Android APP流量统计方法,其特征在于,所述编写eBPF程序包括:在Netd模块中通过C代码编写所述eBPF程序。3.根据权利要求1所述的Android APP流量统计方法,其特征在于,编译所述eBPF程序形成BPF字节码包括:基于Clang/LLVM编译所述eBPF程序形成BPF字节码。4.根据权利要求2所述的Android APP流量统计方法,其特征在于,所述在Netd模块中通过C代码编写所述eBPF程序之后还包括:基于clang编译器将编写后的所述eBPF程序编译成二进制字节码。5.根据权利要求4所述的Android APP流量统计方法,其特征在于,所述基于BPF系统调用的方式将所述BPF字节码加载到内核,在所述BPF程序中创建一个Map包括:基于bpfloader及libbpf_android模块将编译后的置于system/etc/bpf的所述二进制字节码加载到内核libbpf_android库;调用createMaps创建bpf map容器;加载bpf目标文件的接口,调用bpf_prog_load加载bpf程序到内核,调用bpf_obj_pin将所述bpf程序固定到/sys/fs/bpf文件节点;其中,基于所述内核libbpf_android库生成用于封装bpf的系统调用函数的libbpf.so。6.根据权利要求5所述的Android APP流量统计方法,其特征在于...

【专利技术属性】
技术研发人员:杨秀亮
申请(专利权)人:合众新能源汽车股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1