1)NetHogs是一款开源、免费的,终端下的网络流量监控工具,它可监控Linux的进程或应用程序的网络流量。NetHogs只能实时监控进程的网络带宽占用情况。NetHogs支持IPv4和IPv6协议,支持本地网卡以及PPP链接
可以实时地监控网卡的流量,分输入流量Incoming 和输出流量Outgoing两部分,同时统计当前,平均,最小,最大,总流量的值,并且用动态图形方式表现出来,让你一目了然
1)iptraf是一个基于ncurses的IP局域网监控器,用来生成包括TCP信息、UDP计数、ICMP和OSPF信息、以太网负载信息、节点状态信息、IP校验和错误等等统计数据。
vnstat是一个应用于Linux或BSD平台,对网卡流量做监控。 并非是基于网络包嗅探的方式而是基于/proc的分析。现在vnstat已经有出vnstat PHP frontend 扩展了,可以以PHP脚本的形式直接调用vnStat监测的数据
在某些应用安全场景需要结合进程级网络连接、流入流出流量等数据直接分析出进程的异常。例如,在内网主机上是否存在持续恶意外传敏感数据的现象、在网络监控时发现服务器大量带宽被占用但不清楚由系统具体哪个进程占用。为此都需要获取更细粒度的进程级网络流量数据直接锁定异常服务。
在Linux系统中都有相应开源工具采集网络连接、进程、流量等信息,像netstat命令查看主机网络连接信息,一般包括最基本的五元组信息(源地址、目标地址、源端口、目标端口、协议号);ps命令采集进程信息,包括pid, user, exe, cmdline等;iftop命令获取网卡的实时流量数据。
但很可惜没有一个细粒度进程级流入流出网络流量数据。为此,本文旨在分享实现一种统计Linux进程级网络流量方式。
第11列是inode号,代表Linux系统中的一个文件系统对象包括文件、目录、设备文件、socket、管道等的元信息。如图中623457565是某进程监听socket(状态0A)的inode号。
/proc/pid/fd目录是进程所有打开的文件信息,其中0、1、2表示标准输入、输出、错误,网络连接是以socket:开头的文件描述符,其中[]号内的是socket对应inode号,这样可以和网络状态文件/proc/net/tcp下的inode号可对应起来。
解析出packet的五元组(源地址、目标地址、源端口、目标端口、协议号)信息和当前报文的流量大小。
通过对Linux主机抓包,结合网络状态文件、进程文件描述符实现一种细粒度的进程级网络流量采集方式。利用Linux文件inode号作为桥梁,关联出进程、网络连接的映射关系。
本文的实现方式可以按进程维度统计接收/发送的总量/平均值等各维度数据,也可以扩展按网络连接维度统计流量数据,这些在主机流量安全分析、网络监控排查等场景方面可作为重要依据。
本文介绍的流量统计方式是一种通用的实现方式,但持续使用libpcap抓包对主机性能有较明显损耗;滴滴云的主机安全团队研发了一种更高效的实现方式,主机上服务无任何感知能力,目前已在数万台主机上稳定运行,下篇文章进行详细分析,敬请期待。

