标签归档:流量

获取进程网络流量思路

网卡流量与基本特性均可在系统文件下读取或者通过C的socket库函数找到,唯独对获取整个进程的网络流量无从下手

无意中看到nethogs这个软件,可以统计进程的网络流量,粗略的看了下代码,基本思路:

获取进程pid,根据pid遍历/proc/pid/fd/下的所有socket描述符

通过ll命令查看是“19 -> socket:[1016545]”这种形式:

19是个网络套接字的描述符,socket:表明这是一个socket套接字,1016545是这个socket的nodeid

这个nodeid对应于/proc/net/{tcp, udp, tcp6, udp6}文件中的一行

例如:

5: 6401A8C0:C754 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 1016545 1 eeea6400 299 0 0 2 -1

根据这些信息可以获得进程所有网络描述符的通信情况,然后nethogs底层是通过libpcap来获取每个package长度来

计算一定时间内的网络数据流量总和,这部分还没细看,最近会慢慢研究下