已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
杭州电子科技大学本科毕业设计本科毕业设计(2015届)题 目网络流量监控系统开发学 院计算机学院专 业网络工程班 级学 号学生姓名指导教师完成日期41 41杭州电子科技大学本科毕业设计诚 信 承 诺我谨在此承诺:本人所写的毕业论文网络流量监控系统开发均系本人独立完成,没有抄袭行为,凡涉及其他作者的观点和材料,均作了注释,若有不实,后果由本人承担。 承诺人(签名): 年 月 日摘 要近年来随着电子信息以及互联网的快速发展,手机成为了人们生活中的重要一部分,而且随着科技的不断进步,智能手机逐渐占据市场。Android因为其系统的开放性以及适用的普遍性得到了许多手机品牌的青睐,继而Android占据了较大的市场。同时,随着手机终端的不断发展,对于网络的要求也越来越高。互联网的快速发展带来便利的同时也存在着一些不和谐的因素,例如:病毒,恶意软件等等。所以Android手机也未能幸免于这些不和谐因素的干扰,手机中存在的一些恶意软件在后台“偷”流量的现象屡屡可见,所以,对于手机网络流量的管理以及怎样更好的让用户了解流量的使用情况变得越来越重要,也有了更多以及更迫切的需求。针对以上的需求,本次毕业设计通过熟悉Android开发eclipse,开发一个简单的网络流量管理系统。主要是通过对网络流量进行实时的采集检测,并且对采集的数据进行分析计算后分类,形象的展示给用户,让用户能够清晰明确的了解流量的去向;同时通过分析找出影响网络性能的一些因素,从而能够关闭一些不需要的程序,节省网络流量。关键词:Android,手机,网络流量监控Abstract In recent years, with the rapid development of electronic, information and Internet, mobile phone has become an important part of peoples life, and with the constant advances in technology, smartphone gradually occupies the mobile phone market. Android system is a mobile operating platform, because of the open and universal appliance, Android system has been favored by many mobile phone manufacturers, which has already occupied a larger share in phone market. Meanwhile, with the continuous development of mobile terminals, the requirements of network are also increasing. The rapid developing Internet has brought both convenience and discordant elements, such as: network viruses, malware etc., and so as Android phones. Some existing malware steal network traffic in the phone background secretly, they are difficult to find for most users, so traffic disappeared phenomenon So, let users know how to manage the mobile phone network traffic and how to use it have become increasingly important. For the above requirements, this graduation design based on the familiarity of developing Android eclipse, trying to develop a simple network traffic management system similarly. This system mainly through the acquisition and detection of real-time network traffic, and the classification of collected data after analyzing and calculating, then presenting users a clearly flow of their network traffic; at the same time, find the impact factors and turn off some unnecessary programs, to achieve saving network traffic purpose.Keywords: Android, mobile phones, network traffic monitoring目 录1 前言11.1 手机系统的发展与现状11.2 手机网络流量监控研究的意义和目的51.3 手机网络流量监控的研究内容62 涉及的相关技术72.1 开发环境72.2 开发语言和技术73 需求分析103.1 背景和原因103.2 功能需求113.3 其他114 总体设计134.1 基本框架134.2 手机网络流量监控的框架145 详细设计与实现175.1 软件的启动及相关类实现175.2 数据采集实现195.3 流量数据统计实现195.4 联网控制215.5 界面实现245.6 存在的问题266 软件测试286.1 概述286.2 单元测试286.3 功能测试307 结论377.1 工作总结377.2 感想37致谢39参考文献401 前言1.1 手机系统的发展与现状近年来,随着人们对于手机需求的不断增大,市场上智能手机不断的涌出,同时手机操作系统也不断的兴起。手机操作系统把手机的软硬件很好的结合在一起,没有操作系统的手机就像一块废铁。对于智能手机的操作系统而言,各个时期的主流主要有以下几种:1.1.1 Symbian系统塞班公司在2001年6月公布了SymbianS60操作系统,塞班因其有这很呆的客户群体,所以这也给了塞班系统的发展有很大的帮助。但是随着智能手机的不断发展,塞班系统由于对新兴技术支持方面较弱,不能满足客户的越来越高的要求,因而这个昔日的行业大哥,逐渐变得落寞。根据相关数据表示塞班系统的占有率至2012年开始就不断在下降,2012年全球是百分之三,中国则更少。因此,在2013年一月初,官方宣布放弃此系统。这表示着曾经如此辉煌的塞班系统最终消失在手机操作系统行业中。1.1.2 IOS系统IOS是由苹果公司开发的,主要用于手持设备上的操作系统。IOS只有苹果在用,其应用软件非常丰富,且许多游戏软件也非常新颖,但由于其应用软件大多都是需要付费的,且可下载的应用商店较于Android也是少了很多。所以占有率没有Android大。1.1.3 Android系统现如今谈到手机操作系统,Android可谓是曾经的“塞班”,如今Android系统的市场份额已成为了世界第一。Android是一款针对手机的全新开源软件工具包,它由谷歌和开放手机联盟共同创建2。其手机软件非常的多,且大多数是免费的;同时安卓的应用了在许多的应用商店下载、安装、更新;这些便易之处很好的满足了现如今人们对于智能手机的许多需求,因此,基于这一原因,Android系统成为了许多手机的首选系统。1.1.4 Windows Phone2010年10月11日WP正式向全球展示,这是微软挤进智能手机操作系统而推出的一款操作系统。尽管WP有其自身的许多特点,但是似乎还不够成熟,现在在中国的市场也不是特别好。所以对于WP,我们可以和微软一起展望。1.2 手机网络流量监控研究的意义和目的随着智能手机市场前景越来越好,以及用户对于网络的需求越来越高。手机的网络流量问题也越来越被关注,因此在这不断发展的同时,有些不和谐因素的出现,因为手机上很多软件应用需要联网才可以正常运行,而且手机上许多启动的服务是在后台运行的,这些在后台运行的程序和服务也消耗着流量。因此许多恶意软件就采取这样的方式在后台“偷”流量,这使得用户许多时候不知道流量的去处,同时也造成了手机费用的增多,从而使许多用户对于智能手机或是手机联网有着些抵触的心里,以及不好的看法。因此为了用户更好的使用智能手机,以及智能手机和移动网络的更加普及,怎样更好的管理手机网络以及避免手机中恶意程序的存在,手机流量监控就有了较迫切的需求,同时也是极其重要的。手机流量监测的主要目的是通过实时对手机在上网过程中产生的流量获取的到,然后对获取到的数据进行一定的分析和计算得出想要的数据,从而能够了解网络流量的动向。通过分析各个应用程序的流量使用情况分析出某些可疑的恶意软件,从而提醒用户可以关闭这些不必要的甚至是恶意的软件,减少流量的损失。1.3 手机网络流量监控的研究内容1.3.1 手机网络流量现今,手机网络流量主要包括2G/3G网络流量和WIFI流量。据爱立信2012年初发布的行业趋势报告指出随着移动数据流量的飞速增加,智能手机的总流量较于2011年增长了两倍。并且根据此增长速度,预计到了2016年,移动的用户将超过80亿,同时移动数据流量相对于2010年增长10倍。从以上的数据来看,我们可以明显的看出智能机的普及以及移动数据使用量的增加。正是由于这种快速的发展使得手机流量问题愈发被关注,怎样使手机流量的使用更加透明化,直观化成了消费者的诉求。同时考虑到如今市场上Android手机的大比例占有率,本次设计就设计于基于Android的手机流量监控。从而更好的管理手机流量。1.3.2 手机网络流量监控的现状 目前在手机网络流量监控方面国内也有很多的产品。如腾讯手机管家就是一款能够监控手机总体及各种应用使用流量情况得软件,并且能对对其进行统计;能够对数据流量接近设置上限时发出警报;360手机卫士软件有三大核心功能,包括流量统计;统计排行,对每个应用程序的流量使用情况进行统计和排行;联网防火墙,对某些不希望其联网的应用程序进行控制;此外,还有许多常用手机流量管理软件,像瓦力流量仪、Onavo流量监控、百安全管家等等,这些软件在功能上基本都实现了常用的流量监控功能。2 涉及的相关技术2.1 开发环境2.1.1 EclipseEclipse2平台是一个开放的、通用的、可扩展的集成开发环境。整个Eclipse体系结构就像一个大拼图,可以不断的往里面添加插件。这样就可以不断地根据需求对Eclipse进行功能扩充和完善,从这一方面来看,Eclipse的潜能是无限的。Eclipse平台的目的是为了将多种不同的软件开发整合到一起,通过这些Eclipse平台的外挂程序加以扩充使Eclipse除了底层的核心之外,有着很强大的扩充性。同时因为Eclipse上的这些外挂程序能够相互合作和发挥各自的作用,从而使新插入的插件的功能能够轻易的,无缝的加入到Eclipse平台中。2.2 开发语言和技术2.2.1 Android Android4是一个基于Linux核心的开放式手持设备平台操作系统,与Windows Mobile,Symbian等手机操作系统处于同一级别。但因为 Android系统的开放性,现在 Android系统是最流行的系统之一,同时也是市场占有率最高。目前在智能手机上得到广泛的应用。 Android的系统架构采用了分层的架构。从上到下分为四个层次:应用程序层、应用程序框架层、系统运行库层以及Linux核心层。具体如图2-1所示1:图2-1 Android系统框架由上图可得知,Android里面的安全性、内存管理和网络协议栈等都核心的服务依赖于Linux内核,同时Linux也作为硬件和软件栈之前的抽象层存在;系统运行库包含了程序库Libraries和Android Runtime,这一层的功能是由C+开发的。其中Libraries中的Surface Manager通过对应用程序中的一些图层进行组合,然后将这些组合的结果显示到特定的物理设备上;OpenGL|ES和SGL分别是3D、2D的图形库;Media Framework是基于PacketVideo的OpenCORE,能够支持播放以及录制许多流行的音频视频格式以及静态图片格式;FreeType是位图字体和矢量字体渲染;SSL是安全通信;SQLite是Eclipse自带的一个数据库;WebKit是web引擎;Libc是系统C库。而Android Runtime中的Core Libraries是Java核心库类;Dalvik VM是Google自己设计的用于Android的虚拟机;应用程序框架层提供应用程序开发框架极其管理模式。这样的设计对于组件的重用进行了简化,每一个应用程序可以发布其程序当中的功能块,同时对于其它的应用程序也可以来使用这些功能块;而且用户还可以很方便的替换一些自己想要的程序的组件。应用程序层,Android会将同一系列像email客户端、日历、联系人管理程序等的一些核心的应用程序一起发布,同时其他的应用软件则有各软件开发者根据需求和能力自己进行开发。当今市场上的移动设备系统,当之无愧的Android系统成为了很多的首选,所以占有率是最高的,主要有以下的优势。首先就是Android系统的开放性,Android系统的源码都是开发的,任何有兴趣的人都可以对其进行下载研究,同时也正是因为这一点使得其有了很多的开发者,继而带来了更多的创新以及竞争,这一点也能够使系统更快更好的得到完善,同时相对于消费者而言能够得到更加容易的得到更多免费的的资源;并且因为Android系统的开发性,越来越多的开发商使用Android系统,这使得不同的硬件之间的数据能够很好的进行传输,当用户更换手机时数据能够直接进行转移。还有一点很重要的就是Google当中的一些优秀的应用的结合,像地图、搜索、联系人等Google中优秀的服务能够很好的直接结合到Android平台中,这些对用户来说也是极其方便的。2.2.2 JavaJava3是一种简单的、跨平台的、面向对象的的程序设计语言。它与C,C+类似,但是却也不同,在Java中没有指针的概念。Java语言的是跨平台的,它采用的是解释执行的运行环境,而不是编译执行的运行环境。Java程序在执行的时候将程序解释成当前的机器码,这样就可以实现一个跨平台的运行。因为Java语言的极大特点使得其得到了广泛的使用,目前Java语言正在逐渐成为程序员们最爱的语言,也就是说越来越多的程序员将使用Java语言。2.2.3 Iptables Iptables17由核心空间和用户空间两个部分组成。Iptables配置文件是/etc/sysconfig/iptables。Iptables有五条规则链和三张Iptables表。具体如下:(1) filter:管理本机数据包的进出。(2) nat:管理后端主机访问Internet。(3) mangle:管理特殊标记的包。(4) INPUT、OUTPUT这两条主要是数Linux进出数据包有关。(5) FORWARD是将数据包转发到后端的计算机中。(6) PREROUTING、POSTROUTING分别是进行路由判断前后执行的规则。3 需求分析3.1 背景和原因3.1.1 背景互联网和电子产品的快速发展,使得智能手机的应用得到了越来越多的使用;同时响应者用户对于网络的需求,手持移动设备使用网络也变得越来越方便以及普及,主要有运营商提供的2G/3G网络以及新形势的WIFI网络。对于智能手机有所了解的用户都知道许多应用程序的功能都需要连接到网络才能使用,并且我们也知道在互联网飞速发展的同时,网络中还是存在了许多不和谐的因素。在电脑以及网络中我们非常熟悉的有病毒与黑客攻击等等便易的网络中带来的危害,针对这些危害市场上也有了许多的应对措施,如360安全卫士、百度杀毒等等。所以同样的在手机网络使用越来越盛行的同时也存在了一些问题,而这些问题在一定程度上给用户带来了困扰,同时也使得智能手机以及移动网络的发展受到了些许的影响,所以针对这一问题的出现需要有相应的对策。基于Android系统的智能手机可能方便的安装应用程序,这使得用户可以根据自己的需求在通过不通的渠道将应用程序下载并安装在手机上。所以越来越多的开发者可以根据用户的需求开发出新的应用程序。这对于用户和开发者而已都是一个开放的,有利的平台。3.1.2 原因根据背景中我们提到了对于在使用手机上网的过程中出现的问题需要相应的解决方法。还从哪方面来解决这些问题是我们主要考虑的,首先通过分析我们可以得到这样一个结论。解决以上问题理论上可以从三方面着手:一方面是提高用户对于Android系统内部结构的认知水平;第二方面是保证没有恶意软件的存在;第三方面就是使用手机网络流量管理系统。针对以上三个理论上的可行方法,我们通过结合实际情况来进行分析。首先第一个在理论上看似是可行的,但是在实际情况中,我们知道网络的发展虽然是快速的,但是实际发展的时间并不长,对于一般的专业人员来说要清楚的知道Android系统的内部结构都存在一定的困难,而基于Android系统的手机用户是各个文化水平、各个领域的用户都存在,因此这一个方法在实际情况下是无法实现的;第二个同样在实际的场景下是行不通的,或者说至少在现在的情况下是行不通的,因为在文明上网这一方面在当今的社会还是无法有绝对的保障;综合考虑下第三个是现阶段可行的,也是比较合理的一个方法,通过手机应用的方式来实现手机的网络流量监控。3.1.3 可行性研究手机流量监控系统是通过对用户使用流量的情况进行监控,从而让用户对流量的使用情况有着清晰的了解。本系统中通过需求分析,以及开发过程中需要的各种需求:包括采用Java语言编写,需要使用的数据库以及开发环境eclipse。通过这些需求的调查以及现有资源的对比,表明这一系统开发工作是可行的,也是有必要的。3.2 功能需求通过对背景的研究以及需求的了解,可以得出网络流量监控系统有以下的几个需求:从用户的反馈中我们可以知主要存在以下问题:(1) 用户不清楚总流量的使用情况。(2) 用户不清楚各个应用程序的流量使用情况。(3) 后台程序中存在“偷”流量的恶意软件。通过对于问题的简单分析,从以上的问题中我们可以发现主要的原因是对于用户来说手机流量只有一个总数的概念,同时应用程序使用流量对于用户而言是“透明”的,用户最终拿到账单时只知道使用了多少流量总量,却不清楚流量去哪了。相信这对于许多用户来说是一个很无理头的事,所以在满意度上来说是极差的。所以针对这些问题的存在以及用户的需求,使得网络流量管理变成了必要了。(1) 流量统计(日使用、月使用以及2G/3G和WLAN网络的区别)。(2) 每个应用使用流量统计及排行。(3) 当流量使用接近总量时发出警报。(4) 当使用总量等于月可用总量时自动断开网络连接。(5) 可手动对各个应用程序是否访问网络进行控制。(6) 基于以上的需求,系统将主要实现以下几个功能,流量统计、统计排行、流量使用警报、自动断网以及联网控制。3.3 其他3.3.1 开发环境和语言本系统是基于Android的手机网络流量监控,而目前关于Android开发的最流行的是Eclipse开发工具。所以在本次开发过程中的开发环境是Eclipse,关于Eclipse的上一章已有了详细的说明,这里不再重复介绍。开发语言此次手机网络流量监控系统使用的是Java语言进行编写。3.3.2 开发流程(1) 需求分析:对系统进行需求调查,将调查结果整理成需求报告。(2) 概要设计:根据需求的内容,概要的设计主要的一些功能模块,并生成概要设计文档。(3) 详细设计:在根据概要设计的结果上加以具体功能的分配实现、数据表的设计。将主要功能模块细分成各个详细的功能,生成详细设计文档。(4) 编写测试用例和单元测试:根据开发进度安排编写源代码,并进行单元测试。(5) 系统的测试:根据系统的特点和主要功能设计系统的测试方法,对系统进行功能确认。(6) 系统发布和后期优化、维护,开始撰写论文。4 总体设计4.1 基本框架本次设计是基于Android的,因此基本的框架是Android的基本框架,而Androi的基本框架如上图2-1所示。我们都知道Android是一个应用框架,它和传统的Win32的应用开发是有一定区别的。传统的Win32应用,进程之间是相互独立且互不影响的,而Android应用的进程之间是相互复用的,Android平台通过向平台告知需要做什么,平台继而去找相应的活动(Activity)。找到相应的活动启动后,在这个活动中会调用相对应的布局,而最终启动完成后展现给用户是一个界面,也就是布局文件里所设置的页面。4.1.1 Android 应用文件的结构Android 应用文件的结构如图4-1所示:图4-1 Android应用文件结构图由上图可知,Android 应用文件的结构主要为可执行代码、资源文件、AndroidManifest.xml三部分。其中可执行代码主要包括Java和Native;资源文件夹(res)主要包括以下几个文件:(1) Drawable:存放图片。包括hdpi(大分辨率)、ldpi(小分辨率)、mdpi(中分辨率)、xhdpi(超大分辨率)、xxhdpi(超超大分辨率)几种。(2) LogCat:输出日志或日志拦截。(3) Layout:存放布局文件。包括layout-land(横屏)、layout-port(竖屏)。(4) Menu:菜单栏。(5) Values:简单数据,像字符串、颜色值等。AndroidManifest.xml是安卓的清单文件,注册了某些控件、罗列权限等,并且程序中的活动和服务都要在此清单文件中进行注册。整个运行过程是首先执行AndroidManifest.xml文件,获取当前的应用,优先执行的界面;根据路径寻找界面类,寻找onCreat();然后调用布局setContentView();最后根据布局效果显示。4.2 手机网络流量监控的框架本系统的主要框架如图4-2所示:图4-2 系统框架图由图4-2可知,此系统总体的框架是在Android基本框架之上,开发一个新的手机网络流量监控系统,此系统主要的三大逻辑要点是数据采集、数据计算、以及数据的页面展现。数据采集是对手机网络流量数据的获取的一个过程,这是一个基础的功能模块,同时也是最重要的一个功能模块。在Android中关于手机网络流量的传输数据我们可以直接调用相应的函数,因为Android将相应的功能进行了封装;数据统计的过程中将数据按类进行分开,计算且分析;页面显示主要是要更好的将数据展现给用户,让用户能够直观明了的知道流量的一个使用情况,在这一块上主要需要体现一个是界面整洁性,以及界面的友好性,这个是用户体验过程中最直接的一个感受,所以对于手机网络流量监控系统来说页面展现相对比较重要。数据的采集过程中我们分为两类数据,一类主要是2G/3G流量数据,一类是WlAN流量数据。前一类的数据就是我们手机最常用的运营商提供的2G/3G网络网络,甚至于现在还推出了上网更快的4G网络流量(这一类数据流量这里暂时不做介绍)。2G/3G的网络流量现在的覆盖范围较广,所以比较方便,同时这一部分流量数据一般是需要收取费用的,并且费用还不算便宜,所以若是恶意软件总是盗用这一部分流量就会造成过多的上网费用;WLAN的全称是Wireless Local Area Networks,即无线局域网的意思。目前WLAN主要有两种类型,一种就是我们现在最受欢迎的一些公共场所使用无线路由器等设备分享出来的Wifi热点网络,这一部分网络流量是不需要收取费用的,还有一种也是运营商在某些地方搭建的无线基站,在周围一定区域内根据账号和密码进行网络连接,但这种一般也是要收取费用的。基于对需求的分析,系统的功能模块如图4-3所示:图4-3系统功能模块图图4-3的主要功能模块在需求分析里我们有简单的介绍过,这里我们再对这几个模块进行一个说明和补充。(1) 流量统计模块:此模块是对手机中的各种不同的流量,像2G/3G,WIFI流量进行一个使用情况的统计,通过这样的统计分类使得整个手机网络流量有一个大的划分。实现的方法是可以直接调用相应的类函数,读取我们所需要的数据。(2) 流量排行模块:此模块是基于上述模块的,在对总的数据进行统计后,在根据不同的应用程序的使用流量的情况进行排序,从而使用户能够明确的知道各个应用程序使用流量的情况以及那些应用程序使用了过多的流量。其中不同的应用程序会有系统分配的唯一的Linux UID,根据这个值能够代表每个应用程序。(3) 流量警告模块:此模块其实也可以说是一个提醒的模块,因为许多用户不会时刻去关注流量的使用情况,而智能手机几乎开机状态每时每刻都会有流量在消耗,所以这就可能存在一种情况就是当使用流量超过了月可用总流量时用户还未发觉,这就会产生一定的上网流量费用。因此处于这一需求设置了流量警告模块,即(移动网络总流量+设置中的已使用流量)=(本月总流量*流量告警百分比)/100 时,系统会自动的给用户一个流量使用警报。(4) 自动断网模块:此模块是也可以说是上一模块的一个升级版本,即当(移动网络总流量+设置中的已使用流量)=(本月总流量*流量告警百分比)/100 ,系统会自动断开网络的连接。通过控制网络连接开关来实现这一功能。(5) 联网控制模块:此模块相对于自动断网模块是有一定的区别的,自动断网的模块是直接控制手机的整个联网的状态,但是这一模块的对象是手机中各个联网的应用。在这一模块中我们采用iptables 白名单的方式去实现。5 详细设计与实现5.1 软件的启动及相关类实现5.1.1 启动流程我们都知道Android应用程序的启动首先是读取菜单文件AndroidManifest.xml,启动菜单文件中默认启动的Activity。具体的如何启动一个Activity,下面这边进行简单的介绍:首先startActivity会调用startActivityForResultInstrumentation类方法,调用此方法后会进行一个判断,即判断是否需要暂停当前的活动,如果需要的话系统就会暂停当前正在运行的活动,暂停完成并且处理完暂停数据之后,当再次需要恢复此活动时会进行一个判断,判断是否可以resume该活动,可以的话则调用onResume()。在AndroidManifest.xml中的标签中有: 以上内容时表示此 App从这一Activity开始启动。启动的过程如下:首先是将默认启动的Activity继承原有的Activity,然后复写Activity类的onCreate方法,在onCreate中通过setContentView调用布局文件。同时我们还在此方法中重新定义一个Intent,通过Intent.setClass方法来指定通过此Activity启动哪个活动或是哪个服务,最后启动该Intent。 此系统启动的主要代码如下: protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); this.requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);initView(); 5.1.2 相关类实现我们知道Android 项目中首先都会有一个主线程,用于当UI界面有变化时进行管理,所以我们也将其称为UI线程。主线程是确保程序正常启动的一个线程,因此在主线程中的操作不可能包含那些耗时很长的操作,不然会引起程序长时间无法响应,也就是我们在点击某些应用程序出现的“程序无响应”的主要的原因之一。界面的更新操作有时候就会出现一些像需要联网查询数据响应的情况,这些场景如果采用传统的方法的话是不可行的。同时对于UI的更新除主线程的其他线程中是无法直接完成的。为了解决这个问题,我们考虑是否可以在其他线程中进行获取数据的操作,然后将获取结果返回给主线程。在Android中解决这个问题可以使用Handler、Thread和Runnable三个类。Runnable是一个进程,Thread是Runnable的一个子类,而通常Handler是在一个线程中进行定义的,所以三者之间的联系是密切的。下面以本系统中的一个简单的例子来介绍具体的实现过程。首先创建一个线程,在线程里面定义Handler,然后将获取的数据通过调用Handler的sendMessage()方法进行发送。部分代码如下:public void onClick(View v) switch(v.getId()case R.id.btn_main_adjust:new Thread()public void run() Message msg = myHandler.obtainMessage();msg.what = HANDLER_MESSAGE_MEAL_SETTING;myHandler.sendMessage(msg);.start();break;default:break; 数据发送之后,交由HandlerExtension进行处理,部分代码如下:private static class HandlerExtension extends Handler private WeakReference theActivity = null;public HandlerExtension(MainActivity theActivity)this.theActivity = new WeakReference(theActivity);public void handleMessage(Message msg) MainActivity theActivity = this.theActivity.get();if(HANDLER_MESSAGE_MEAL_SETTING = msg.what)theActivity.readDevFile(); 5.2 数据采集实现数据的采集是此系统中实现其他功能模块的一个重要的基础,在Android系统中我们该如何对手机流量的数据进行采集,主要有以下两种方法:(1) 抓包:通过抓包可以将网络中传输的数据包进行截获,通过此种方法我们可以获取到网络的流量。但抓包的过程需要用到抓包软件,如sniffer(嗅探器)、wireshark、httpwatch等,这些软件在实际中使用的非常广也较方便,但是在此系统中使用此方法的难度比较大,所以不选择采用。(2) 读取Linux的本地的文件。前面我们介绍过Android,我们知道Android操作系统的底层核心是Linux,并且它是一个开发的系统。而在Linux系统中许多数据都存放在各自的文件中,通过使用Root Explorer去查看系统的文件得到以下几个文件与流量监控有关:/proc/net/dev:此文件主要是记录了系统中的流量的一个总体的情况;/proc/uid_stat/%d:其中%d是进程的UID,此文件中包含了tcp_rcv(总的接收字节数)、tcp_snd(总的发送字节数)两项数据。通过对以上两种方法的分析,根据开发此系统的实际情况,选择第二种方法。同时因为在Android 2.2之后有了流量监控API,原理上也是像第二种方法一样读取一些本地的文件,然后把流量数据的监控封装到了A.TrafficStats这个类当中(关于TrafficStats类将在流量数据统计目录中做详细介绍)。所以基于这样的一个方便,在此系统中我们将调用API来直接获取手机网络流量的数据。5.3 流量数据统计实现流量数据统计主要要分为以下几种要素:(1) 2G/3G流量和WIFI流量。(2) 接收总流量和发送总流量。(3) 指定UID的流量和总的流量。从以上的要素点来看,对于流量的统计是一个复杂且凌乱的过程。但是在上面我们有提到Android中关于流量的数据有一个强大的TrafficStats类,通过这个类中提供的的静态的方法可以轻松的直接调用获取想要的各种数据。通过对这个类的定义中我们知道返回的类型是long型,且当返回是-1时则代表UNSUPPORTED (即当前设备不支持统计)。相应的一些方法如下:TrafficStats.getMobileRxBytes(); / 获取2G/3G接收的字节流量总数TrafficStats.getMobileRxPackets(); / 获取2G/3G接收数据包总数TrafficStats.getMobileTxBytes(); / 获取2G/3G发送的字节流量总数TrafficStats.getMobileTxPackets(); / 获取2G/3G发送的数据包总数以上四个方法读取的是/proc/net/dev文件,当手机中网络断开后/proc/net/dev文件就不存在了,所以当重新连接网络后数据会重新进行统计;TrafficStats.getUidRxBytes(uid);/获取手机指定的UID对应的应用程序通过2G/3G+WIFI接受的字节流量总数TrafficStats.getUidTxBytes(uid);/获取手机指定的UID对应的应用程序通过2G/3G+WIFI发送的字节流量总数TrafficStats.getTotalRxBytes(); / 获取手机2G/3G+WIFI接收的字节流量总数TrafficStats.getTotalRxPackets(); / 获取手机2G/3G+WIFI接收的数据包总数TrafficStats.getTotalTxBytes();/ 获取手机2G/3G+WIFI发送的字节流量总数TrafficStats.getTotalTxPackets();/ 获取手机2G/3G+WIFI发送的数据包总数根据调用以上TrafficStats类的各种方法,我们得到了2G/3G的总流量、2G/3G+WIFI的一个总流量,所以需要得到WIFI的流量只需进行相应的计算。例如我们在计算Wifi网络的接收流量时通过将总的所有网络形式下的总流量减去移动数据的流量,同样的计算Wifi网络的发送流量时将总的所有网络形式在的总流量减去移动数据的总的发送量。而若需要得到瞬时流量则可以就当前总流量减去旧的总流量的值,然后再把当前总的流量的值赋给旧的流量的值,这样就得流量的值就在不断的更新,从而可以计算出瞬时的一个流量数。从而也就能够实现本系统中对于流量的一个统计。本系统中具体的实现是当系统第一次运行时,将系统文件的流量数据划归到19700101这天里面去,作为历史的一个数据流量。然后将统计到的数据用两张表来保存。(1) package_snapshot:是流量数据的快照信息。如图5-1所示:图5-1 流量数据图(2) package_delta:这个是统计流量数据的增量 。如图5-2所示:图5-2 流量数据增量图在上图中network_type有三种mobile、wifi、空值;其中snapshot_id是计算增量时的快照信息,last_snapshot_id是本网络接口的最近一次的流量数据快照;后面的rx_bytes tx_bytes rx_packages tx_packages 都是流量的增量信息,四列分别代表的意思是 接收字节数、发送字节数、接收数据包数、发送数据包数。5.4 联网控制联网控制是流量检测系统中的一个重要的模块,在本次系统中主要是防火墙的实现。原理是用的Iptables,Iptables是linux系统带的一个防火墙功能,Iptables指令可以划分为两个部分,一个是“Iptables指令参数”,另一个是“规则语法”。在使用的过程中结合了netfilter,而netfilter的架构就是在整个网络流程的若干位置放置了一些检测点(HOOK),而在每个检测点上登记了一些处理函数进行处理。系统实现过程中参考了Android DroidWall开源的项目,通过修改其拦截方式,将白名单改成黑名单,即所有程序默认是会自动放行的,只有设置了需要拦截的,才禁止上网通信。自动断网模块也设计了联网控制的模块,实现的方式是调用系统的一个API,但是由于安全性的考虑,需要通过反射来调用实现。反射调用ConnectivityManager类的setMobileDataEnabled方法来让系统关闭移动网络。其ConnectivityManager这个类是android系统提供的与网络连接有关的一个管理服务类。核心代码如下:private void checkTrafficAlarm() long packageBytesTotal = this.sharedPreferences.getLong(AppConstants.PACKAGE_SIZE_MOBILE_TOAL, 0L);long packageBytesUsed = this.sharedPreferences.getLong(AppConstants.PACKAGE_SIZE_MOBILE_USED, 0L);int alarmPercent = this.sharedPreferences.getInt(AppConstants.TRAFFIC_ALARM_PERCENT, 80); boolean bAutoDisconnect = this.sharedPreferences.getBoolean(AppConstants.TRAFFIC_ALARM_AUTO_DISCONNECT, true);if (0 = packageBytesTotal) return;long dataArray = this.dataManager.getPackageData();long packageBytesMobile = packageBytesUsed + dataArray0;if (packageBytesMobile = alarmPercent * packageBytesTotal / 100) / 流量超过预警设置String text = 当前使用流量达到 + NetworkUtils.readableFileSize(packageBytesMobile);if (bAutoDisconnect) text += , 已启用自动断网功能;Notification notification = new NotificationCompat.Builder(this).build();notification.icon = R.drawable.app_icon;notification.tickerText = text;notification.flags |= Notification.FLAG_AUTO_CANCEL;RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.layout_notification);remoteViews.setImageViewResource(R
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广东广州市黄埔区人民政府黄埔街道办事处党建组织员招聘1人备考题库及一套参考答案详解
- 2025重庆市大渡口区应急管理局公益岗招聘5人备考题库及答案详解参考
- 2025黑龙江佳木斯市总工会招聘工会社会工作者14人备考题库参考答案详解
- 2026招商银行成都分行寒假实习生招聘备考题库附答案详解(精练)
- 2025中国工商银行云南省分行纪检人才专项社会招聘备考题库含答案详解(b卷)
- 2026福建省面向中央财经大学选调生选拔工作备考题库含答案详解(培优b卷)
- 2026中信银行秋季校园招聘备考题库附答案详解(完整版)
- 2025黑龙江绥化市海伦市招聘社区工作者10人备考题库及答案详解(名校卷)
- 2026陕西省选调生招录报名备考题库含答案详解(黄金题型)
- 2026中国建设银行青海省分行校园招聘130人备考题库及答案详解1套
- DB33-T 1389-2024 树木保护性移栽技术规范
- 东北师大附属中学2025届高三物理第一学期期中教学质量检测试题含解析
- 帝国的兴衰:修昔底德战争史学习通超星期末考试答案章节答案2024年
- 国元农业保险股份有限公司招聘笔试题库2024
- 数据新闻概论 课件 第7章 数据新闻的设计
- TCNEA-核电厂放射性固体废物包难测核素活度浓度比例因子确定方法
- 吨包包装称重器的研制与应用
- 中级财务会计期末试题及答案
- NB-T33022-2015电动汽车充电站初步设计内容深度规定
- JT-T-489-2019收费公路车辆通行费车辆类型
- 中考物理专题复习《电功率》测试卷-含参考答案
评论
0/150
提交评论