編程實現Linux流量監控

概述

目標是顯示出進程的上傳和下載流量和速度。好比Firfox: 累計上傳1MB,累計下載23MB,上傳速度0KB/s,下載速度121KB/s。node

實時監控應用程序的流量,包括應用程序的下載速度,上傳速度,下載總量和上傳總量。數組

實現過程分爲3個主要步驟。數據結構

步驟1Libpcap經過抓包實時統計網口流量,統計sip+sport+dip+dportpayload的鍵值結構socket

步驟2獲取Socket Status,經過解析/proc/net/(tcp6?|udp6?)獲得local_ip+local_port+remote_ip+remote_portinode的鍵值結構tcp

步驟3獲取Process Status,經過解析/proc/xx/fd/獲得inodeprocess_name的鍵值結構spa

經過上面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累加到對應地方。ip

PID-InodePName-PID

經過解析/proc/xx/fd/獲得。rem

目標是獲得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數組,同時計算出即時速度。

相關文章
相關標籤/搜索