linux监控进程网络,Linux系统中如何统计并监控每个进程的网络流量

前言

在某些应用安全场景需要结合进程网络连接、流入流出流量等数据可分析出是否在内网存在恶意外传敏感数据现象在网络监控 时发现 服务器大量带宽被占用但不清楚由系统具体哪个进程占用 。为此都需要获取到更细粒度的进程级网络流量数据综合分析。

linux都有相应开源工具实时采集网络连接、进程等信息其中网络连接一般包括最基本的五元组信息(源地址、目标地址、源端口、目标端口、协议号)再加上所属进程信息pid, exe, cmdline)等。其中这两项数据大多可直接读取linux /proc目录下的网络状态连接文件/proc/net/tcp、/proc/net/udp), 进程状态目录(/proc/pid/xx) 。

在某些应用安全场景需要结合进程网络连接、流入流出流量等数据可分析出是否在内网存在恶意外传敏感数据现象在网络监控 时发现 服务器大量带宽被占用但不清楚由系统具体哪个进程占用 。为此都需要获取到更细粒度的进程级网络流量数据综合分析。

在linux proc目录下可查到主机级网络数据,例如/proc/net/snmp提供了主机各层IP、ICMP、ICMPMsg、TCP、UDP详细数据,/proc/net/netstat 文件 InBcastPkts、 OutBcastPkts、InOctets、OutOctets字段表示主机的收发包数、收包字节数据。很可惜没有 进程级流入流出网络流量数据。

为此参考nethogs原理实现统计进程级网络流量方式。

基本数据

涉及proc以下几个目录或文件网络状态文件/proc/net/tcp、/proc/net/udp, 进程文件描述符目录/proc/pid/fd。

网络状态文件/proc/net/tcp

我们重点关注五元组+状态+inode号分别在第2、3、4、11列

其中第23列分别是主机字节序ip:port ,例如”0500000A:0016″ -> “10.0.0.5″, 22

第4列是状态信息状态字段含义

你可能感兴趣的:(linux监控进程网络)