/*********************************************************************
 * Author  : Samson
 * Date    : 11/19/2014
 * Test platform:
 *              3.13.0-24-generic
 *              GNU bash, 4.3.11(1)-release
 * *******************************************************************/

主要分为下面几个步骤:   

(1)、通过使用抓包Libpcap库技术,对网络流量包进行获取。从而能够得到每一个网络通信包的五元组(源地址、目标地址、源port、目标port、协议号)信息和当前包的流量大小。得到这些信息后建立一个表,此表中的同一会话的包大小信息会随着此会话的不断交互而累加数据包的大小。   

(2)、通过对/proc/下的全部进程的fd/文件夹下的全部链接进行遍历查看link的值。将遍历到的全部包括socket:开头的连接,将进程号与遍历所得的相应进程号、进程相应的全部socket fd相应的inode号进行建表。在命令行能够输入下面命令进行某一进程的当前网络连接情况查看,例如以下(以firefox为例):

#get PID of firefox

v0id@v0id:~$ ps aux | grep firefox

v0id       2143  7.8 21.0 1138824 433960 ?      Sl   11:19  44:36 /usr/lib/firefox/firefox

得到firefox的进程号为2143,那么查看此进程的fd下的文件描写叙述符。使用下面命令就可以看到此进程下文件夹下的有关socket的文件描写叙述符信息,readlink后的结果中有socket开头的即为网络连接使用的fd(文件描写叙述符)。紧接在socket:后的即为fd的inode号,运行命令例如以下:

v0id@v0id:~$ ll /proc/2143/fd/ | grep socket

lrwx------ 1 v0id v0id 64 11月 19 11:19 10 -> socket:[27273]

lrwx------ 1 v0id v0id 64 11月 19 20:48 101 -> socket:[3726782]

lrwx------ 1 v0id v0id 64 11月 19 11:19 13 -> socket:[27336]

lrwx------ 1 v0id v0id 64 11月 19 11:19 14 -> socket:[27337]

lrwx------ 1 v0id v0id 64 11月 19 11:19 21 -> socket:[28264]

lrwx------ 1 v0id v0id 64 11月 19 20:48 30 -> socket:[29375]

lrwx------ 1 v0id v0id 64 11月 19 20:48 31 -> socket:[29692]

lrwx------ 1 v0id v0id 64 11月 19 20:48 32 -> socket:[30810]

lrwx------ 1 v0id v0id 64 11月 19 20:48 33 -> socket:[30812]

lrwx------ 1 v0id v0id 64 11月 19 20:48 36 -> socket:[31803]

lrwx------ 1 v0id v0id 64 11月 19 11:19 4 -> socket:[26607]

lrwx------ 1 v0id v0id 64 11月 19 20:48 40 -> socket:[31071]

lrwx------ 1 v0id v0id 64 11月 19 20:48 41 -> socket:[31073]

lrwx------ 1 v0id v0id 64 11月 19 20:52 44 -> socket:[5245647]

lrwx------ 1 v0id v0id 64 11月 19 20:52 69 -> socket:[5244897]

lrwx------ 1 v0id v0id 64 11月 19 20:52 71 -> socket:[5248187]

lrwx------ 1 v0id v0id 64 11月 19 20:52 72 -> socket:[5246226]

lrwx------ 1 v0id v0id 64 11月 19 20:52 75 -> socket:[5246227]

lrwx------ 1 v0id v0id 64 11月 19 20:52 76 -> socket:[5246228]

lrwx------ 1 v0id v0id 64 11月 19 20:52 77 -> socket:[5248188]

lrwx------ 1 v0id v0id 64 11月 19 20:52 78 -> socket:[5248189]

lrwx------ 1 v0id v0id 64 11月 19 20:52 79 -> socket:[5246239]

lrwx------ 1 v0id v0id 64 11月 19 20:48 80 -> socket:[3726781]

lrwx------ 1 v0id v0id 64 11月 19 20:52 81 -> socket:[5248214]

lrwx------ 1 v0id v0id 64 11月 19 20:52 82 -> socket:[5248217]

lrwx------ 1 v0id v0id 64 11月 19 20:52 83 -> socket:[5246330]

lrwx------ 1 v0id v0id 64 11月 19 20:52 84 -> socket:[5248215]

lrwx------ 1 v0id v0id 64 11月 19 20:52 85 -> socket:[5246331]

lrwx------ 1 v0id v0id 64 11月 19 20:52 86 -> socket:[5248216]

lrwx------ 1 v0id v0id 64 11月 19 20:52 87 -> socket:[5248218]

lrwx------ 1 v0id v0id 64 11月 19 20:52 88 -> socket:[5249212]

lrwx------ 1 v0id v0id 64 11月 19 20:48 89 -> socket:[37239]

lrwx------ 1 v0id v0id 64 11月 19 11:19 9 -> socket:[27820]

lrwx------ 1 v0id v0id 64 11月 19 20:52 90 -> socket:[5248222]

lrwx------ 1 v0id v0id 64 11月 19 20:52 92 -> socket:[5248223]

lrwx------ 1 v0id v0id 64 11月 19 20:52 93 -> socket:[5249279]

lrwx------ 1 v0id v0id 64 11月 19 20:48 94 -> socket:[37240]

lrwx------ 1 v0id v0id 64 11月 19 20:48 96 -> socket:[38308]

lrwx------ 1 v0id v0id 64 11月 19 20:48 97 -> socket:[37345]

lrwx------ 1 v0id v0id 64 11月 19 20:52 98 -> socket:[5249281]

lrwx------ 1 v0id v0id 64 11月 19 20:52 99 -> socket:[5249282]



(3)、通过对网络连接状态文件/proc/net/tcp中的当前通信连接进行实时读取,通过得到连接的源地址、目标地址、源商品、目标port就可以在抓包表中找到相应的可以查看到每一个进程所连接的网络通道的信息,通过和抓包所得的五元组信息进行比較,就可以在步骤(1)中建立的表中找出相应的每一个程序所相应的网络流量。再通过把每一个连接相应的inode与步骤(2)中遍历进程所得到的表进行对照。就可以找出连接相应的进程;这里就行把每一个进程相应的流量统计出来了。通过累加每一个进程的网络流量就可以得到总的网络流量。

v0id@v0id:~$ ll /proc/2143/fd/ | grep socket ; cat /proc/net/tcp

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

   0: 0101007F:0035 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 12396 1 00000000 100 0 0 10 0                             

   1: 0100007F:0277 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 11404 1 00000000 100 0 0 10 0                             

   2: 9707A8C0:8BB9 0C7CB5DC:0050 02 00000001:00000000 01:00000166 00000002  1000        0 5243074 2 00000000 400 0 0 2 5                            

   3: 9707A8C0:86F7 DF08A8C0:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5245647 1 00000000 21 4 8 10 -1                           

   4: 9707A8C0:BFC9 E99D4F75:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5248217 1 00000000 20 4 24 10 -1                          

   5: 9707A8C0:85FC AE2ED0CB:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5248218 2 00000000 20 4 24 10 -1                          

   6: 9707A8C0:9052 C99D4F75:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5246239 2 00000000 20 4 20 10 -1                          

   7: 9707A8C0:9281 925C4F75:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5246331 1 00000000 20 4 8 10 -1                           

   8: 9707A8C0:DFB3 DD5D4F75:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5249212 2 00000000 21 4 24 10 -1                          

   9: 9707A8C0:DFB5 DD5D4F75:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5248223 2 00000000 20 4 24 10 -1                          

  10: 9707A8C0:A614 E19D4F75:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5246330 1 00000000 20 4 24 10 -1                          

  11: 9707A8C0:9051 C99D4F75:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5248189 2 00000000 20 4 1 6 -1                            

  12: 9707A8C0:904B C99D4F75:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5244897 1 00000000 20 4 8 10 -1                           

  13: 9707A8C0:DFA5 DD5D4F75:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5248187 2 00000000 20 4 8 10 -1                           

  14: 9707A8C0:A613 E19D4F75:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5248214 1 00000000 20 4 24 10 -1                          

  15: 9707A8C0:905E C99D4F75:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5249281 3 00000000 20 5 3 10 -1                           

  16: 9707A8C0:EAFE DF08A8C0:0050 08 00000000:00000001 00:00000000 00000000  1000        0 2102209 1 00000000 20 4 6 50 16                           

  17: 9707A8C0:DFB0 DD5D4F75:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5248216 2 00000000 20 4 24 10 -1                          

  18: 9707A8C0:904E C99D4F75:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5246227 2 00000000 20 4 20 10 -1                          

  19: 9707A8C0:DFB6 DD5D4F75:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5249279 2 00000000 21 0 0 10 -1                           

  20: 9707A8C0:905F C99D4F75:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5249282 2 00000000 20 4 9 10 -1                           

  21: 9707A8C0:C8CF 8805E29F:0050 08 00000000:00000001 00:00000000 00000000  1000        0 273820 1 00000000 20 4 6 43 16                            

  22: 9707A8C0:975D 525D58DE:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5246226 1 00000000 21 4 24 10 -1                          

  23: 9707A8C0:9055 C99D4F75:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5248215 1 00000000 20 4 20 10 -1                          

  24: 9707A8C0:DFB4 DD5D4F75:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5248222 2 00000000 20 4 24 10 -1                          

  25: 9707A8C0:DFA9 DD5D4F75:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5248188 2 00000000 21 4 8 10 -1                           

  26: 9707A8C0:904F C99D4F75:0050 01 00000000:00000000 00:00000000 00000000  1000        0 5246228 2 00000000 20 4 11 10 -1



能够在发上的内容中找到inode号与(2)中列出的socket:[inode]一样的值了吧,比如inode为5248222的连接,同样的即是说这个连接是属于firefox进行的了。

在GNU Linux中怎样得到一个进程当前的流量的更多相关文章

  1. Linux中强制结束一个进程的终极方法

    在 Linux Ubuntu 服务器上用 dnx 基于 Kestrel 成功运行一个 ASP.NET 5 站点后,怎么也无无法退出. 运行的命令如下: /data/git/dnx/artifacts/ ...

  2. 在Linux中要修改一个文件夹或文件的权限

    在Linux中要修改一个文件夹或文件的权限我们需要用到linux chmod命令来做,下面我写了几个简单的实例大家可参考一下. 语法如下: chmod [who] [+ | - | =] [mode] ...

  3. 在Linux中通过Top运行进程查找最高内存和CPU使用率

    按内存使用情况查找前15个进程,在批处理模式下为"top" 使用top命令查看有关当前状态,系统使用情况的更详细信息:正常运行时间,负载平均值和进程总数. 分类:Linux命令操作 ...

  4. linux中使用top获取进程的资源占用信息

    在linux中使用top获取进程的资源占用信息: Cpu(s):  1.0%us,  0.0%sy,  0.0%ni, 98.3%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0 ...

  5. linux中内核的一个不错的参数somaxconn

    导读:在linux中,/proc/sys/net/core/somaxconn这个参数,linux中内核的一个不错的参数somaxconn 看下其解析: 对于一个TCP连接,Server与Client ...

  6. GNU Linux中的SO_RCVLOWAT和SO_SNDLOWAT说明

    /*********************************************************************  * Author  : Samson  * Date   ...

  7. GNU linux 中makefile那点事

    转自陈皓: http://bbs.chinaunix.net/viewthread.php?tid=408225 概述—— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为 ...

  8. Linux中的程序和进程,PID和PPID

    环境:Vmware Workstation:CentOS-6.4-x86_64 程序和进程: 1.程序:程序是静止的,程序就是磁盘上的一个文件. 2.进程:进程是一个正在执行的程序的实例. 3.进程是 ...

  9. linux中如何对一个文件的内容进行处理,文件中每行有多个字段的值,中间用空格分隔开?

    需求描述: 今天在帮同事看个需求,将操作系统上的文件进行修改名字,改为特定的名字,所以呢,就先把这些原名字及对应的新名字关系放到了一个文本中,对于这个文本执行循环. 文件格式如下: .00000005 ...

随机推荐

  1. nodejs——避免判断创建多级目录

    基本概念 fs.exists已经弃用,可以使用fs.access判断文件夹是否存在,但是官方的建议是在进行文件操作前不要使用fs.access,官方推荐的方式的是直接进行文件操作,有错误再修改 不建议 ...

  2. 使用openssl搭建CA并颁发服务器证书

    本来整理了一份执行脚本,但是没有找到附件功能.只好直接贴当时自己看过的链接了. 文章标题:Openssl Certificate Authority 转载链接:https://jamielinux.c ...

  3. HDU_1175_连连看

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1175 大意:连连看规则,只能转两次弯,先输入矩阵0表示没有棋子,正整数表示不同的棋子,然后询问,输入两点坐 ...

  4. MySQL的基本概念与操作

    数据库的基本概念什么是数据库?用于存储和管理数据的仓库.数据库的特点:持久化存储数据的.其实数据库就是一个文件系统方便存储和管理数据使用了统一的方式操作数据库 – SQL数据库的分类:数据库根据存储采 ...

  5. Python的伪造数据库:Faker

    faker 是一个可以让你生成伪造数据的Python包,在软件需求.开发.测试过程中常常需要利用一些假数据来做测试,这种时候就可以使用 Faker 来伪造数据从而用来测试. 一.Faker安装 pip ...

  6. 1054.求平均数-PAT乙级真题

    从其他博客优秀代码中学到了些技巧,记录一下. 思路:使用sscanf和sprintf函数. sscanf() – 从一个字符串中读进与指定格式相符的数据 sprintf() – 字符串格式化命令,主要 ...

  7. QQ浏览器占用资源真的大

    Edge 和 QQ浏览器 对比 正常情况下: QQ浏览器 看1个直播频道 ,CPU就几乎是在90% usage 范围 ,看2 个 就非常卡 下面就是对比图 Edge 我个人觉得 Edge 比 QQ好用 ...

  8. [Luogu] P1993 小K的农场

    题目描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三种形式描述: 农场a比农场b至少多种植了c个单位的作 ...

  9. Cash Machine POJ - 1276

    解法 多重背包板子题 多重背包板子 如果上限的体积大于了给定的体积那么套完全背包 否则二进制优化成01背包 代码 #include <iostream> #include <cstr ...

  10. <Zookeeper>入门 概念

    分布式协调服务 Zookeeper 分布式环境的特点 1.分布性 基于一个硬件或者多个硬件设备以及多个软件组成的分布在不同网络计算机上的系统架构,通过消息传递进行通信协调.在空间上部署是可以任意的,网 ...