精华内容
下载资源
问答
  • Linux进程网络流量统计方法及实现

    千次阅读 2018-11-02 13:19:19
    1 前言 在某些应用安全场景需要结合进程级网络连接、流入流出流量等数据直接分析出进程的...在Linux系统中都有相应开源工具采集网络连接、进程流量等信息,像netstat命令查看主机网络连接信息,一般包括最基本的...

    1 前言

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

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

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

    但很可惜没有一个细粒度进程级流入流出网络流量数据。为此,本文旨在分享实现一种统计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号,分别在第2、3(local_address)、4(st)、11列(inode)。

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

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

    常见网络状态如0A,01 分别代表某进程正监听和已建立连接状态。

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

    2.2 进程文件描述符

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

    以pid:30168进程为例,该进程监听8888(0x22B8)端口,在/proc/30168/fd目录下显示文件描述符是3、5代表的是sokcet连接,对应inode号分别是623457565、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个关键步骤。

    在这里插入图片描述

    1. 抓包
      使用抓包Libpcap库获取到网络报文packet结构。

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

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

    4. hash查找
      根据查找到inode号在InodeProcessHash缓存查找相应进程pid。

    5. 统计流量
      根据报文地址,判断当前连接方向,累加进程流入、流出数据。

    4 总结

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

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

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

    本文原作者:周峤

    展开全文
  • linux 监控进程实时网络流量

    千次阅读 2019-06-24 10:35:00
    NetHogs 是一个开源的命令行工具(类似于Linux的top命令),用来按进程或程序实时统计网络带宽使用率. 来自NetHogs项目网站: NetHogs是一个小型的’net top’工具,不像大多数工具那样拖慢每个协议或者是每个子网的...

    参考链接 https://linux.cn/article-2808-1.html

    NetHogs 是一个开源的命令行工具(类似于Linux的top命令),用来按进程或程序实时统计网络带宽使用率.

    来自NetHogs项目网站:

    NetHogs是一个小型的’net top’工具,不像大多数工具那样拖慢每个协议或者是每个子网的速度而是按照进程进行带宽分组.NetHogs NetHogs不需要依赖载入某个特殊的内核模块. 如果发生了网络阻塞你可以启动NetHogs立即看到哪个PID造成的这种状况.这样就很容易找出哪个程序跑飞了然后突然占用你的带宽.

    这篇文章为你讲解了如何在Unix/Linux操作系统下如何安装和使用NetHogs按进程监控网络带宽使用率。

    一.要安装NetHogs,你必须要启用你所用Linux下的EPEL源.然后运行下面的yum命令下载安装NetHogs包.

    [root@tempt42 /]# yum install nethogs

     

    .在基于RedHat系统下键入如下命令启动NetHogs工具.

    转载于:https://www.cnblogs.com/gongzixiaobaibcy/p/11066291.html

    展开全文
  • linux进程网络流量监控工具nethogs

    千次阅读 2017-09-18 14:10:10
    nethogs进程流量监测 nethogs的安装也比较方便,各个linux发行版用包管理命令安装即可(例如,yum/apt-get/zypper等),暂时发现ubuntu14.04用apt-get安装有个坑,就是因为14.04的仓库里nethogs包为旧版本0.8,这...
    木纳哥 2017-09-16 07:19

    相信好多同学在使用linux的时候,都有想查看某些服务进程网络流量的需求,例如http服务,代理服务等。linux有许多监控网络流量的工具:要查看linux主机上的总体带宽情况,可以使用nload、iftop、ifstat等工具,但是要查看这台设备上的每个进程连接的带宽情况,这时候nethogs就派上用场了。

    linux进程网络流量监控工具nethogs

    nethogs进程流量监测

    nethogs的安装也比较方便,各个linux发行版用包管理命令安装即可(例如,yum/apt-get/zypper等),暂时发现ubuntu14.04用apt-get安装有个坑,就是因为14.04的仓库里nethogs包为旧版本0.8,这个版本有个bug,使用时会一直报错

    "creating socket failed while establishing local IP - are you root?"

    所以ubuntu14.04推荐源码安装最新版的nethogs,安装过程大家网上可自行搜索。

    linux进程网络流量监控工具nethogs

    没错我就是这么懒

    最后,使用起来来相当简单,直接指定接口名称就行

    nethogs eth0

    linux进程网络流量监控工具nethogs

    nethogs命令

    可以实时查看进程网络流量状态,退出ctrl+C。

    当然了,如果想用更好的图形界面,cacti或者zabbix监控平台值得研究,其中zabbix是一个企业级监控平台,监控网络流量只是它的能力之一,有兴趣的同学可以好好研究一下。

    linux进程网络流量监控工具nethogs

    @觉得不错的,加个关注点个赞,木纳哥就会有更大的动力来贡献更多的内容,感谢各位@


    展开全文
  • linux查看耗费流量进程--iftop

    万次阅读 2017-09-04 15:06:24
    我们知道在Linux中,top命令可以查看服务器中资源的一些情况,cpu,内存等,还可以看到是谁在消耗内存或cpu,但是,有些时候,我们发现,cpu和内存并不吃紧,但是服务器依然很慢,这时候,我们需要多一个维度来帮助...

    我们知道在Linux中,top命令可以查看服务器中资源的一些情况,cpu,内存等,还可以看到是谁在消耗内存或cpu,但是,有些时候,我们发现,cpu和内存并不吃紧,但是服务器依然很慢,这时候,我们需要多一个维度来帮助我们分析问题,就是流量的统计,今天给大家介绍一个工具iftop,希望帮助大家解决这个问题。


    iftop先睹为快:

            

    1,界面介绍

            界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。
            中间的<= =>这两个左右箭头,表示的是流量的方向。

            TX:发送流量
            RX:接收流量
            TOTAL:总流量
            Cumm:运行iftop到目前时间的总流量
            peak:流量峰值
            rates:分别表示过去 2s 10s 40s 的平均流量


            官网:http://www.ex-parrot.com/~pdw/iftop/

            知道端口,我们可以通过 netstat -ntlup|grep 端口号 来查看具体进程,并通过ps -ef |grep 进程号,查看相关信息,这样就容易定位消费流量的大户是谁了!



    2,准备:

            必要库文件,需要 libpcap 及 libcurses 。

            yum install -y flex byacc libpcap ncurses ncurses-devel libpcap-devel

            指定目录:cd /usr/local/

            下载:wget http://www.ex-parrot.com/~pdw/iftop/download/iftop-0.17.tar.gz

            解压:tar zvfx iftop-0.17.tar.gz


            应用配置

                    cd iftop-0.17

                    ./configure --prefix=/usr/local/iftop


            编译:make && make install
            复制可执行文件到linux库:cp /usr/local/iftop/sbin/iftop /bin


    3, 运行iftop

            查看要监控的网卡名:ifconfig -a

            

            请必须是root级别用户

            iftop -i eth0 -n -P

            更详细的参数可以iftop -h查看


    总结:

           在linux上,通过安装一系列插件,实现对linux的扩充,这是操作系统,但是映射到Java,不也是一样的吗?很多地方都是相同的,这就可以归类与一种结果:可扩充软件,也是常常我们说的做标准,可替换可扩充,和最近读到的一本数《黑客与画家》中对java的介绍是有共同点的,他是寻求的统一,模块,而不是定制,在统一,模块的基础上,解放出人,人,才可以被替换,这也是一种非常值得学习的理念!

    展开全文
  • 查看Linux占用流量进程Iftop工具主要用来显示本机网络流量情况及各相互通信的流量集合,如单独同哪台机器间的流量大小,非常适合于代理服务器和iptables服务器使用,这样可以方便的查看各客户端流量情况。...
  • 有三个命令vnstat、iftop、nethogs(推荐) 都需要额外安装软件 使用yum或apt-get 一、vnstat使用,查看接口统计报告 ...iftop可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示...
  • NetHogs监控Linux/Centos的每个进程流量

    千次阅读 2020-06-01 17:28:48
    有很多适用于Linux系统的开源网络监视工具。比如说,你可以用命令iftop来检查带宽使用情况。netstat用来查看接口统计报告,还有top监控...NetHogs是一个开源的命令行工具(类似于Linux的top命令),用来按进程或程序
  • 查看Linux每个进程流量和带宽

    万次阅读 多人点赞 2015-05-20 10:40:13
    原文 http://www.slashroot.in/find-network-traffic-and-bandwidth-usage-process-linux,译者FJ. 请联系fj_wind(at)126.com作为一个系统管理员,有时候需要搞清楚一台机器上的哪个进程占用了较高的网络带宽。如果...
  • 1、Linux查看网络即时网速sar-nDEV11001代表一秒统计并显示一次100代表统计一百次使用ntop等工具,就更方便简单了,不过这个更灵活2、nload3、nethogs 详细查看每个进程的即时网速默认是eth0,使用nethogs eth1 查看...
  • linux查看具体进程占用的网络流量

    千次阅读 2020-01-09 14:02:28
    TX:发送流量 RX:接收流量 TOTAL:总流量 Cumm:运行iftop到目前时间的总流量 peak:流量峰值 rates:分别表示过去 2s 10s 40s 的平均流量 查看端口流量 测试Linux服务器上传下载带宽 CentOS iperf 安装iperf命令...
  • 使用说明(参数基本使用默认值就行了,这个工具好处就是能清楚查看到哪个进程占用了更大的网络流量) 用法:nethogs[-v][-h][-b][-d秒][-v模式][-c计数][-t][-p][-s][设备[设备…]] -V:打印版本。 -H:...
  • 参考:http://zzll.org/iftop-install.html 安装方法: yum install -y gcc flex byacc libpcap libpcap-devel ncurses ncurses-devel libpcap-devel tcpdump wget http://www.ex-parrot.com/~pdw/iftop/...
  • Linux-进程管理与调度 进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序
  • Linux服务器出流量很大,请问什么命令或者工具可以查一下什么进程干的?
  • 查看整个系统的网卡流量使用情况 可以参考下这篇总结比较全面的文章 监控具体的某个进程所消耗的流程 首先,Linux没有自带这样的工具,通过这款第三方开源工具,也是比较好用,如果有其他的办法欢迎留言 # yum -y...
  • 现在开发了一个程序,在linux下跑,想在里面加一个对特定进程的网络流量监控,实时统计进程流量大小 现在想到的办法就是用libpcap库,对应/proc里面文件按照pid 端口号 数据包 数据大小 进行统计得出当前流量大小...
  • linux进程状态如下图: 浅度睡眠为进程等待资源或中断响应,即使资源没有拿到也可以被唤醒;深度睡眠为进程等待资源,拿到资源后进入就绪状态。 僵死状态为进程死亡,但还没有被父进程执行wait操作,此时进程...
  • Linux中有各种查看网络流量的工具,比如sar、iftop、nethogs等。它们可以从不同的纬度来分析系统中流量信息,本文进行简要介绍。 详细信息 阿里云提醒您: 如果您对实例或数据有修改、变更等风险操作,务必...
  • 一种基于linux系统的精准流量统计方法

    千次阅读 多人点赞 2019-06-25 10:53:50
    linux系统关于流量统计,已经有开源的工具,比如nethogs,nload和iptraf。它们适合我们在PC上直接监控某台设备的流量情况,但并不适合我们应用到自己的程序中去。如果要在自己代码中实现流量的统计,可以有下面几...
  • Linux进程管理工具汇总

    千次阅读 2018-05-05 20:36:55
    如果我们的Linux系统整个系统资源快要被耗尽时,我们是否能够找出那个最消耗系统资源的进程,然后删除该进程,让系统恢复正常呢,或者由于某个程序存在BUG,导致产生一系列的问题,有如何查找它并结束进程?...
  • Linux网络流量监控

    2016-03-28 11:51:02
    又一次不要脸的转载了别人的东西。。。。。。... ...在Linux下怎么看网络流量?...Linux问题 ...在Linux下怎么看网络流量?...在Windows下,我们可以很方便的通过360来查看网络流量,知道哪个进程占用的网络带宽比
  •  分享一个linux 下检测系统进程占用带宽情况的检查。来自github上的开源工具。  它不依赖内核中的模块。当我们的服务器网络异常时,可以通过运行nethogs程序来检测是那个程序占用了大量带宽。节省了查找时间。 ...
  • Linux 查看系统资源、进程、内存占用等信息可以使用 top,检查磁盘 IO 可以使用 iotop,检查网络状态可以使用 netstat,检查实时网络流量,监控TCP/IP连接等,可以使用 iftop 。 iftop官网 1. 安装 # 安装...
  • linux下一些特殊进程

    千次阅读 2017-11-28 11:45:43
    InitKthreaddMigration ksoftirqd Watchdogd Events Init Linux下有3个特殊的进程,idle进程(PID=0), init进程(PID=1)和kthreadd(PID=2) * idle进程由系统自动创建,运行在内核态 idle进程其pid=0,其前身是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,135
精华内容 24,054
关键字:

linux查询进程流量

linux 订阅