基于Linux操作系统的程序网络流量监控方法及系统与流程

文档序号:18297812发布日期:2019-07-31 09:38阅读:444来源:国知局
本发明涉及国产linux操作系统进程网络监控技术,是一种结合进程信息和网络知识的相关功能。
背景技术
::国产linux操作系统相比windows操作系统感染病毒的几率要小的多,但是仍然存在定向病毒感染的风险,而蠕虫病毒或者其他类型的病毒在感染主机后可以自动连接网络,访问预设好的网站,达到下载更新病毒的目的,病毒的这个特性增强了自身的顽固性和攻击性能。而病毒在操作系统中是以进程的方式运行的,我们可以通过监测并控制进程的网络活动来达到提高安全能力的目的。目前的linux任务管理器或者其他的相关软件均统计网卡流量,存在以下缺点:没有对进程的网络活动进行监控;没有对网卡的端口粒度进行流量监控;没有对底层数据包的负载进行解析等。技术实现要素:针对上述情况提出基于linux内核proc文件系统、qt中的qwt插件和pcap捕包等机制的进程网络监控方法,该方法包括以下三个线程:1、线程一portmap:(1)遍历/proc/net/tcp,/proc/net/tcp6,/proc/net/udp三个文件中的每条连接记录,记下端口号,连接状态,inode号等信息;(2)对于(1)中的每条记录,均执行matching()函数,这个函数遍历/proc/pids/fd中的所有符号连接文件,通过readlink()函数,得到连接信息,解析连接信息,匹配1中记下的inode号与连接信息中套接字句柄socket[],如果匹配则端口匹配到了进程pid,将这一条记录加入portmap_table表;(3)线程睡眠1s,继续执行1。2、线程二sniffer:(1)lookupdev()寻找可嗅探的设备并打开它;(2)编译并应用自己写的抓包规则,默认抓取所有包络;程序中设置的规则为ipandtcp;(3)openlive()开启会话,并返回一个句柄;0为设置网卡为非混杂模式,这里我们并不想嗅探其他机器的数据包,故设置为非混杂模式;(4)pcap_loop(会话句柄,-1,编译规则,回调函数),复制链路层传输的符合规则的包络,-1表示一直抓包到出错为止;(5)回调函数解析包络,returnto(4)。3、线程三maintain:linux为我们提供了时间戳结构体和时间获取函数,可精确到微妙级,结构体为structtimeval,函数为gettimeofday(&structtimevaltime,null);包ip层以上数据长度len=包长len-以太网头len-ip头len;(1)maintain启动函数中,得到一个original时间戳,并传给got_packet解析包回调函数,第一个包到来时的start时间;(2)structpcap_pkthdr{structtimevalts;bpf_u_int32caplen;bpf_u_int32len;}这是每次pcap回调的默认参数,可见pcap对每个数据包都按上了时间戳;(3)累积时间差>=1s,就计算流速并更新,并归零秒累积数据和时间差;(4)利用包上的时间戳来更新start时间戳,returnto(2)继续轮循;其中portmap负责将维护一个端口和进程的映射表,这个映射表就是portmap_table,从而能将线程sniffer捕捉的特定端口的数据包更新到对应的进程流量节点中;sniffer负责捕包,将数据包交给包络解析函数,包络解析函数会根据数据包更新网络活动链,重复这个过程直到线程结束;maintain是一个不停更新网络活动链中每个进程流量节点中流量值的线程。创建并扩展网络活动链,其中网络活动链指由一个个进程流量统计节点组成的链表,创建并扩展是指sniffex或portmap线程在发现新的进程网络活动时,将新的进程流量统计节点加入其中。进程流量计算与链表维护,根据网络活动链,每个进程流量统计节点都记录着时间戳和数据量,这样就可以通过时间差来计算流量;在计算流量的同时,还要将网络活动已停止的进程节点删除,保证网络活动链只包含网络活跃的进程节点。打印网络活动链,网络活动链是一个链表,每个进程流量统计节点对应的结构体都包含流量、数据量和时间戳等字段,打印网络活动链其实就是在输出进程流量统计结果。本发明的有益效果:本发明所设计的进程网络流量监控技术具备以下优点:提供上层和下层两个层面的网络流量监控,上层针对整个网卡流量以及进程端口映射,下层通过在链路层捕包,分析进程的网络流量;针对进程的控制分为三级,分别为网络连接不受限制、禁止网络活动和杀死进程等;对进程进行了用户权限的划分,方便显示和管控。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明一个实施例的方法的示意性流程图。具体实施方式为了使本
技术领域
:的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。为了便于对本发明的理解,下面结合附图和具体实施对本发明进行说明。本实施例提供的基于linux内核proc文件系统、qt中的qwt插件和pcap捕包等机制的进程网络监控方法,该方法包括三个线程,三个线程可同时执行,三个线程的具体步骤如下:线程一portmap(1)遍历/proc/net/tcp,/proc/net/tcp6,/proc/net/udp三个文件中的每条连接记录,获取网口链接记录并记下所述链接记录的端口号,连接状态,inode号;(2)对于(1)中的每条记录,均执行matching()函数,这个函数遍历/proc/pids/fd中的所有符号连接文件,通过readlink()函数,得到连接信息,解析连接信息,匹配1中记下的inode号与连接信息中套接字句柄socket[],如果匹配则端口匹配到了进程pid,将这一条记录加入portmap_table表;(3)线程睡眠1s,继续执行1。线程二sniffer具体为:(1)lookupdev()寻找可嗅探的设备并打开它;(2)编译并应用自己写的抓包规则,默认抓取所有包络;程序中设置的规则为ipandtcp;(3)openlive()开启会话,并返回一个句柄;0为设置网卡为非混杂模式,这里我们并不想嗅探其他机器的数据包,故设置为非混杂模式;(4)pcap_loop(会话句柄,-1,编译规则,回调函数),复制链路层传输的符合规则的包络,-1表示一直抓包到出错为止;(5)回调函数解析包络,returnto(4)。线程三maintain:linux为我们提供了时间戳结构体和时间获取函数,可精确到微妙级,结构体为structtimeval,函数为gettimeofday(&structtimevaltime,null);包ip层以上数据长度len=包长len-以太网头len-ip头len;(1)maintain启动函数中,得到一个original时间戳,并传给got_packet解析包回调函数,第一个包到来时的start时间;(2)structpcap_pkthdr{structtimevalts;bpf_u_int32caplen;bpf_u_int32len;}这是每次pcap回调的默认参数,可见pcap对每个数据包都按上了时间戳;(3)累积时间差>=1s,就计算流速并更新,并归零秒累积数据和时间差;(4)利用包上的时间戳来更新start时间戳,returnto(2)继续轮循。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1