Linux进程网络流量统计的实现过程
作者:zhouqiao 发布时间:2023-08-26 19:37:00
前言
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、管道等的元信息。
进程文件描述符
/proc/pid/fd目录下列出当前进程打开的文件信息其中0、1、2表示标准输入、输出、错误。
网络连接是以socket:开头的文件描述符,其中[]号内的是inode号这样与网络状态文件/proc/net/tcp下的inode号可对应起来
以pid:25133进程为例, 文件描述符是10、12 对应inode号分别是512505532、512473483的网络连接,同时在下图中的/proc/net/tcp都可以查找到对应连接的详细信息。
根据上述文件信息可以从/proc/net/tcp建立起网络连接五元组->inode的映射, 而 /proc/pid/fd建立起连接inode ->进程的映射。
这样 通过inode号作为桥梁关联起系统内的进程与网络连接的信息。
实现流程
为了实时获取网络连接流量在linux主机上使用开源libpcap库来抓取网络报文。整个实现流程图如下包含以下5个关键步骤。
抓包
使用抓包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抓包对主机性能有损耗影响。
以上所述是小编给大家介绍的Linux进程网络流量统计的实现过程,希望对大家有所帮助
来源:http://www.freebuf.com/articles/system/182158.html


猜你喜欢
- 我是一个农村的90后站长,搞网站4年了,对于网站宣传有一些研究。网站做好了肯定是想让更多的人看到,毕竟是咱的心血,没有人看怎么行。那么我们就
- linux搭建NFS服务器为了实现不同操作系统中的数据共享,我们一般会搭建一些用于文件共享的服务器,nfs服务器就是其中一种,它实现的是li
- 周六生产服务器出现redis服务器不可用状态,错误信息为:状态不可用,等待后台检查程序恢复方可使用。Unexpected end of st
- 1、购买云服务器注册帐号,在产品页面选择合适的服务器,进入详细页面选择配置,购买。购买完成后进入管理控制台——云虚拟主机、ECS云服务器查看
- 旷土年前写过一篇标题为《旷土:中国商业网址的成功经验分享 初期发展篇》的文章,写得比较粗糙,今天就来详细谈谈运作中的一些经验。旷土在运作中国
- linux中共享库以so为后缀(shared object),与Windows下的DLL类似,是在程序运行时动态连接。多个进程可以连接同一个
- 大家都知道,让百度和google收录的方法不仅仅是向她提交自己的站点,这种方法在几年前经常使用,可是目前,大家所使用的恐怕都不这样做了,现在
- 虚拟机是非常方便的测试软件,我们可以用来做各种测试,不会对硬件造成伤害,为了能够更加方便的演示环境,便于做各种例子;而又能保证主机的快速运行
- 互联网走到今天,已经进入了Web 2.0时代,它已经影响到了我们生活的各个方面,人与互联网之间的联系越来越紧密,其中搜索引擎扮演着一个重要的
- 在UCHome2.0中,推荐功能使用起来很简单。进入UCHome网站后台,找到“推荐成员设置”选项后,做些简单地设置,就可以完成推荐了。见下
- 网上流传的很多关于windows server 2003系统的安全配置,但是仔细分析下发现很多都不全面,并且很多仍然配置的不够合理,并且有很
- 最近正在学习Linux系统的常用操作命令,于是心血来潮,想自己安装一个Linux系统实践一下,在网上找了半天资料,终于在自己的电脑上成功安装
- 众所周知,Linux虽然在桌面应用上赶不上Windows普及和易用,但也恰恰是因为其看起来很麻烦的命令行操作,使得其在安全性方面要优于为了易
- 最近在使用 Ubuntu 20.04 的kazam进行录音的时候,发现了一个问题:使用系统默认的配置进行录音,录制出来的音频会有明显的噪音,
- 随着杀毒软件的身躯越来越庞大,资源占用越来越多,“裸奔”的人也越来越多.其实只要有良好的习惯,平时再多加注意,就算不装杀毒软件也威胁不大.但
- 核心提示:SEO是一项相当复杂、精细的工作,成功的SEO涉及主动营销型网站建设从网站品牌的确立到ROI (Return on Investm
- 如果你负担不起付费主机,那免费使用的虚拟主机往往是最好的选择。但在你决定使用免费主机以前有几点是你必须要注意的,最重要的是你不能期望和要求免
- 两权分立的FTP工作模式,工作环境: ADSL---(219.154.214.150)NAT(10.41.221.2)-----PC(10.
- Google adsense终于改进了广告打开方式了,由原理的同一窗口打开改为新窗口打开,就像当初google搜索页面的窗口打开方式变化一样
- 您是不是在为不知道怎样提高网站上的广告单价而烦恼?那么就好好学习一下我们今天的这篇文章吧!在Google AdSense 系统投放广告时,网