Linux统计进程网络,Linux进程网络流量统计

news/2024/8/26 4:28:12 标签: 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列是状态信息状态字段含义如下:

“01″: “ESTABLISHED”,

“02″: “SYN_SENT”,

“03″: “SYN_RECV”,

“04″: “FIN_WAIT1″,

“05″: “FIN_WAIT2″,

“06″: “TIME_WAIT”,

“07″: “CLOSE”,

“08″: “CLOSE_WAIT”,

“09″: “LAST_ACK”,

“0A”: “LISTEN”,

“0B”: “CLOSING”

第11列是inode号 linux系统文件系统中的一个文件系统对象包括文件、目录、设备文件、socket、管道等的元信息。

6c2f61805e16d318924c98360cc91e00.png

进程文件描述符

/proc/pid/fd目录下列出当前进程打开的文件信息其中0、1、2表示标准输入、输出、错误。

网络连接是以socket:开头的文件描述符,其中[]号内的是inode号这样与网络状态文件/proc/net/tcp下的inode号可对应起来

d977d926579238f729eaa32f62289649.png

以pid:25133进程为例, 文件描述符是10、12 对应inode号分别是512505532、512473483的网络连接,同时在下图中的/proc/net/tcp都可以查找到对应连接的详细信息。

e38ff4e890d98929fdccea28134af1a5.png

根据上述文件信息可以从/proc/net/tcp建立起网络连接五元组->inode的映射, 而 /proc/pid/fd建立起连接inode ->进程的映射。

这样 通过inode号作为桥梁关联起系统内的进程与网络连接的信息。

实现流程

为了实时获取网络连接流量在linux主机上使用开源libpcap库来抓取网络报文。整个实现流程图如下包含以下5个关键步骤。

20cfbf99ecd8438cfbb3b0dff4e2f96a.png

抓包

使用抓包Libpcap库获取到网络packet结构。

解析报文

解析出packet的五元组(源地址、目标地址、源端口、目标端口、协议号)信息和当前包的流量大小。

缓存更新

在ConnInodeHash查找五元组组成的key对应的inode号如果不存在重新读取/proc/net/tcp与udp刷新ConnInodeHash缓存建立起连接与inode的映射并重新读取/proc/pid/fd目录对所有文件描述符遍历过滤出以socket:开头的连接刷新InodeProcessHash缓存重新建立inode与进程的映射。

hash查找

根据查找到inode号在InodeProcessHash查找相应进程pid。

统计流量

根据报文地址,判断网络连接方向,累加进程流入、流出数据。

总结

对linux主机抓包,结合网络状态文件、进程文件描述符实现一种细粒度的进程级网络流量采集方式。

通过linux 文件inode号作为桥梁,关联出进程、网络连接的关系,可以统计进程接收/发送的总量/平均值等各维度数据,也可以分析出进程各个网络连接的流量数据,这些在主机流量安全分析、网络监控排查等场景方面可作为重要依据。但同时也需要注意的是持续通过libpcap抓包对主机性能有损耗影响。

*本文作者:zhouqiao,转载请注明来自FreeBuf.COM返回搜狐,查看更多

责任编辑:


http://www.niftyadmin.cn/n/1178029.html

相关文章

MySQL 触发器结构及三个案例demo

--你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了。这跟SQL的标准有所不同。 CREATE TRIGGER语法 CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW…

设置UIScrollView只可以水平或者竖直滚动

UIScrollView里边包含多个UIWebView: 可以通过设置contentSize的值,设置其width为UIScrollerView可视区域的宽度:即UIScrollView的width,在设置一些alwaysBounceHorizontal之类的属性,那么就只能竖直方向滚动&#xff…

Windows 08R2_AD图文详解

目录 目录软件环境Active Directory域服务 AD的应用创建ADDS域使用Windows窗口来创建ADDS域控制器使用Powershell来创建ADDS域控制器检查ADDC域控制器是否安装成功添加新的管理工具 创建额外域控制器使用Windows窗口界面来安装额外域控制器使用Powershell脚本来安装额外域控制器…

Char 07 扩展命令

Desc : 扩展 并 添加 插件 或者 添加 模块 转载于:https://www.cnblogs.com/Nancy0401/p/5600200.html

linux命令在哪里使用,如何知道你在Linux里最常使用哪几个命令?

不知道大家自接触 Linux 以来,都使用过哪些命令,其中最常用的命令是什么?我最常用的命令之一是 sudo ,因为我每天都在使用它在 Linux 上安装、更新、删除软件包以及其它各种需要超级用户权限的操作。那么你知道你自己最经常使用的是哪几个命…

Emacs 配置文件

以下是我整理的 emacs 配置文件,供刚开始玩 emacs 的同学参考。网上有人说:emacs 是神的编辑器,如果能够用到这样的编辑器,那这个人就是神了。从我个人的经验来看,emacs 是一把利器,用好它,将会…

通过c程序更改文件的ctime和mtime

通过c程序更改文件的ctime和mtime与某个文件相同 源文件words.txt [rootbogon ~]# ll words.txt ;ll words.txt -u -rw-r--r-- 1 root root 740 7月 14 2007 words.txt -rw-r--r-- 1 root root 740 6月 12 09:33 words.txt 新建测试文件text.txt [rootbogon ~]# touch text.t…

在Android Studio中使用shareSDK进行社会化分享(图文教程)

【前言】 如今的app当中,几乎都包含了社会化分享的功能,来两张图see 一 see: 好在这种分享功能已经有第三方平台帮我们做好了,我们直接调用其SDK即可。市面上做社会化分享平台的比较好平台的有:mob等。 今天我们就用mo…