博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程实现Linux流量监控
阅读量:6431 次
发布时间:2019-06-23

本文共 1206 字,大约阅读时间需要 4 分钟。

hot3.png

概述

目标是显示出进程的上传和下载流量和速度。比如Firfox: 累计上传1MB,累计下载23MB,上传速度0KB/s,下载速度121KB/s。

实时监控应用程序的流量,包括应用程序的下载速度,上传速度,下载总量和上传总量。

实现过程分为3个主要步骤。

步骤1Libpcap通过抓包实时统计网口流量,统计sip+sport+dip+dportpayload的键值结构

步骤2获取Socket Status,通过解析/proc/net/(tcp6?|udp6?)得到local_ip+local_port+remote_ip+remote_portinode的键值结构

步骤3获取Process Status,通过解析/proc/xx/fd/得到inodeprocess_name的键值结构

通过上面3个步骤把payloadprocess_name关联起来,再通过运算得到下载速度,上传速度,下载总量和上传总量等相关数值。

数据结构以及数据转换

IPGroup-Inode

通过解析/proc/net/(tcp6?|udp6?)得到的IP四元组和Inode的键值结构,这个文件得到的IP四元组组合是socket层面地址,为了判断方向,需要使用IPGroup-Dir存储方向信息,{local_addr+remote_addr : 1}表示上行(上传)和{remote_addr+local_addr : 2}表示下行(下载)。

IPGroup-Payload

通过Pcap抓包解析得到的IP四元组和包负载的键值结构,本方法获取的IPGroupTCP/IP协议层的IPGroup,得到{src_addr+dest_addr : payload},利用IPGroup-Dir得到该数据包的方向,然后把payload累加到对应地方。

PID-InodePName-PID

通过解析/proc/xx/fd/得到。

目标是得到PName-Payload,同时计算实时网速。

程序流程

1.初始化存储空间,初始化PID-InodePname-PIDIPGroup-PayloadIPGroup-Inode关系数组。

2.Pcap开始抓包并且监听’package‘事件,统计packageIPGroup-Payload数组。

3.设置定时器,定时更新PID-Inode,Pname-PIDIPGroup-Inode,其中根据/proc/xx/fd/更新PID-INodePName-PID,根据/proc/net/[tcp6?|udp6?]统计出IPGroup-Inode。更新完后结合IPGroup-Payload根据数据转换图转换成PName-Payload数组,同时计算出即时速度。

转载于:https://my.oschina.net/u/862582/blog/364348

你可能感兴趣的文章
执行命令取出linux中eth0的IP地址
查看>>
CRUD全栈式编程架构之控制器的设计
查看>>
python常用内建模块(五)
查看>>
你为什么有那么多时间写博客?
查看>>
Excel 中使用VBA
查看>>
$.ajax同步请求会阻塞js进程
查看>>
[原创] 消消乐游戏
查看>>
Postman 网络调试工具
查看>>
Python教程6
查看>>
zabbix实现自动发现功能添加磁盘监控
查看>>
一个完整的WSDL文档及各标签详解
查看>>
mysql8.0.14 安装
查看>>
C++基础算法学习——猜假币
查看>>
1039. 到底买不买(20)
查看>>
K - Kia's Calculation (贪心)
查看>>
android笔试题一
查看>>
【JavaEE企业应用实战学习记录】getConnListener
查看>>
了解轮询、长轮询、长连接、websocket
查看>>
bzoj2427[HAOI2010]软件安装
查看>>
bzoj1593[Usaco2008 Feb]Hotel 旅馆*
查看>>