1 前言

在某些应用安全场景须要结合进程级网络链接、流入流出流量等数据直接分析出进程的异常。例如,在内网主机上是否存在持续恶意外传敏感数据的现象、在网络监控时发现服务器大量带宽被占用但不清楚由系统具体哪一个进程占用。为此都须要获取更细粒度的进程级网络流量数据直接锁定异常服务。node

在Linux系统中都有相应开源工具采集网络链接、进程、流量等信息,像netstat命令查看主机网络链接信息,通常包括最基本的五元组信息(源地址、目标地址、源端口、目标端口、协议号);ps命令采集进程信息,包括pid, user, exe, cmdline等;iftop命令获取网卡的实时流量数据。linux

同时在linux /proc目录下可直接读取主机级网络流量数据,例如/proc/net/snmp提供了主机各层IP、ICMP、ICMPMsg、TCP、UDP详细数据,/proc/net/netstat文件InBcastPkts、 OutBcastPkts、InOctets、OutOctets字段能获取主机的收发包数、收包字节数据。web

但很惋惜没有一个细粒度进程级流入流出网络流量数据。为此,本文旨在分享实现一种统计Linux进程级网络流量方式。缓存

2 基础数据

涉及linux /proc目录下网络状态文件/proc/net/tcp、/proc/net/udp,进程文件描述符目录/proc/pid/fd。安全

2.1 网络状态文件

以tcp的状态文件为例/proc/net/tcp:服务器

sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode

6: 0100007F:22B8 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 623457565 1 ffff88004f918740 750 0 0 2 -1

重点关注网络链接五元组+链接状态+inode号,分别在第二、3(local_address)、4(st)、11列(inode)。网络

第二、3列分别是主机字节序ip:port ,例如"0100007F:22B8" -> “10.93.122.33:8888”socket

第4列是网络链接状态信息,状态字段含义以下:tcp

"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"

常见网络状态如0A,01 分别表明某进程正监听和已创建链接状态。svg

第11列是inode号,表明Linux系统中的一个文件系统对象包括文件、目录、设备文件、socket、管道等的元信息。如图中623457565是某进程监听socket(状态0A)的inode号。

2.2 进程文件描述符

/proc/pid/fd目录是进程全部打开的文件信息,其中0、一、2表示标准输入、输出、错误,网络链接是以socket:开头的文件描述符,其中[]号内的是socket对应inode号,这样能够和网络状态文件/proc/net/tcp下的inode号可对应起来。

以pid:30168进程为例,该进程监听8888(0x22B8)端口,在/proc/30168/fd目录下显示文件描述符是三、5表明的是sokcet链接,对应inode号分别是62345756五、623457729。

ls -l /proc/30168/fd

lrwx------ 1 root root 64 Oct 30 10:46 0 -> /dev/pts/0

lrwx------ 1 root root 64 Oct 30 10:47 1 -> /dev/pts/0

lrwx------ 1 root root 64 Oct 30 10:46 2 -> /dev/pts/0

lrwx------ 1 root root 64 Oct 30 10:47 3 -> socket:[623457565]

lrwx------ 1 root root 64 Oct 30 10:47 4 -> anon_inode:[eventpoll]

lrwx------ 1 root root 64 Oct 30 10:48 5 -> socket:[623457729]

再从/proc/net/tcp过滤22B8,能够发现有两条记录,状态分别为"0A",“01”,inode号是623457565, 623457729,与前面30168进程fd目录下的inode号一致,就可找到这链接归属的进程。

cat /proc/net/tcp |grep 22B8

6: 00000000:22B8 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 623457565 1 ffff8811f2fd1740 100 0 0 10 0

13: 0100007F:22B8 0100007F:ED2C 01 00000000:00000000 00:00000000 00000000 0 0 623457729 1 ffff8810880e1740 20 4 30 10 -1

根据上述文件信息能够从/proc/net/tcp创建起网络链接五元组->inode的映射, 再从/proc/pid/fd创建起链接inode ->进程的映射。

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

3 实现流程

为了实时获取网络链接流量在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。

统计流量

根据报文地址,判断当前链接方向,累加进程流入、流出数据。

4 总结

经过对Linux主机抓包,结合网络状态文件、进程文件描述符实现一种细粒度的进程级网络流量采集方式。利用Linux文件inode号做为桥梁,关联出进程、网络链接的映射关系。

本文的实现方式能够按进程维度统计接收/发送的总量/平均值等各维度数据,也能够扩展按网络链接维度统计流量数据,这些在主机流量安全分析、网络监控排查等场景方面可做为重要依据。

本文介绍的流量统计方式是一种通用的实现方式,但持续使用libpcap抓包对主机性能有较明显损耗; 滴滴云的主机安全团队研发了一种更高效的实现方式,主机上服务无任何感知能力,目前已在数万台主机上稳定运行,下篇文章进行详细分析,敬请期待。

本文原做者:周峤

linux 进程流量统计,Linux进程网络流量统计方法及实现相关推荐

  1. Linux下C/C++实现(网络流量分析-NTA)

    网络流量分析(NTA - Network Traffic Analysis) 就是捕捉网络中流动的数据包,并通过查看包内部数据以及进行相关的协议.流量.分析.统计等,协助发现网络运行过程中出现的问题. ...

  2. mysql 查看网络流量,linux 查看 CPU,内存,网络流量和磁盘 I/O

    linux 查看 CPU,内存,网络流量和磁盘 I/O 使用vmstat命令来察看系统资源情况 在命令行方式下,如何查看CPU.内存的使用情况,网络流量和磁盘I/O? Q: 在命令行方式下,如何查看C ...

  3. Linux系统弱口令检测和网络端口扫描方法(JR、NMAP)

    Linux系统弱口令检测和网络端口扫描方法JR.NMAP 一.系统弱口令检测 1.Joth the Ripper ,简称JR 2.安装JR工具 3.检测弱口令账号 4.密码文件的暴力破解 5.基本步骤 ...

  4. linux 查看网络流量来源_Linux查看网络流量

    作为一个非职业运维,不时需要查看Linux服务器上的网络流量状况.本文介绍几个常用的Linux查看网络流量命令,并简要介绍其用法.部分命令系统已经内置,某些命令则需要从软件仓库或者自行编译安装,本文以 ...

  5. 端口镜像 流量过滤_在 AWS 云环境中滥用 VPC 流量镜像抓取网络流量

    云环境下的网络检测问题 人们可能希望监视云环境中的网络流量有很多原因--出于攻击和防御的目的.被动的网络检查在云环境中可能很困难,而且在这之前需要对网络配置进行重大修改,以确保每台主机都被监控,并且不 ...

  6. linux查看网口流量ifconfig,ifconfig与网络流量监控

    我们在linux/unix下最常用的工具莫过于ifconfig了.ifconfig的输出中有两项,分别是: RX==receive,接收,从开启到现在接收封包的情况,是下行流量. TX==Transm ...

  7. Linux 命令之 tcpdump -- 监听网络流量

    文章目录 命令介绍 参考文档 命令介绍 tcpdump 命令是一款 sniffer 工具,是 Linux 上的抓包工具,嗅探器:它可以打印出所有经过网络接口的数据包的头信息. tcpdump 命令工作 ...

  8. linux网络流量统计,linux下网络流量监控统计

    最近在做虚拟化迁入评估,其中很重要的一项就是流量的问题.现在部署一个工具和脚本用来统计服务器的网络流量. linux下监控流量的工具有很多,比如ifstat.iftop等. 个人还是喜欢ifstat, ...

  9. 局域网网络流量监控_【干货】Linux网络安全运维:网络流量监控与分析工具Ntop和Ntopng...

    本文授权转载自微信公众号:计算机与网络安全,转载请联系授权.对于单台服务器网络故障的排查,iftop工具可以轻松实现,但是在监控一个庞大的服务器网络,并且要分析每台主机以及端口的网络状态时,iftop ...

  10. linux查看网络流量 命令,linux查看流量命令

    Linux系统下想要查看网络流量,那我们该使用那个命令呢?下面由学习啦小编为大家整理了linux查看网络流量的命令的相关知识,希望对大家有帮助. linux查看网络流量命令大全 linux查看网络流量 ...

最新文章

  1. 【iCore3 双核心板_ uC/OS-III】例程一:认识 uC/OS-III
  2. 认认真真推荐几个机器学习和Python类的公众号
  3. python原生字符串可以参与比较_正则表达式中对于原生字符串的理解
  4. 网络电话---异常处理01
  5. 基于共享内存的聊天室服务程序
  6. oracle open_link,open_links_per_instance 和 open_links 参数说明
  7. Amber Group受邀成为DeFi Alliance成员单位,持续助力DeFi生态发展
  8. DELL服务器常见报错信息
  9. L2-006 树的遍历(建树)
  10. 发布量子加密手机,浓眉大眼的三星也开始技术碰瓷了?
  11. wcl怀旧服网站中文查服务器fb进度,魔兽世界怀旧服wcl数据查询方法
  12. 西游记笔记与想法(2)
  13. dfuse 发布全新 EOSIO 链迁移工具
  14. 数组,异质结构以及指针的详解
  15. 云服务器布置_使用云端服务器 部署步骤(详细)
  16. 什么是mybatis,全是干货
  17. JS 图片压缩上传并在iOS中矫正方向
  18. Egret:一个简单的打砖块游戏
  19. oracle查看服务器的时间,Oracle如何获取系统当前时间等操作实例
  20. Scala 令人着迷的类设计

热门文章

  1. 一、Linux的由来
  2. 如何利用计算机班级成绩分析,计算机二级excel真题:制作期末成绩分析表
  3. Google Earth Engine(GEE)——下载2020-2021年的NDBI
  4. 批处理(.bat)文件
  5. 蓝桥杯:第九届—“彩灯控制器”
  6. 洛谷P2738 [USACO4.1]篱笆回路Fence Loops(Floyed求最小环)
  7. css单位-vh/vw
  8. atoi和itoa的模拟实现
  9. python打开网址搜索关键字_Python实验:百度搜索关键字自动打开相关URL
  10. what is MacPorts?