导航:首页 > 操作系统 > linux进程的网络流量

linux进程的网络流量

发布时间:2024-08-06 22:21:45

1. linux如何获得一个进程的网络流量

Linux下是没有文件直接给你按进程记录流量信息的。你想要编程实现的话,办法是有的,只是比较麻烦。首先,你需要能截取流经网卡的数据包,这个可以通过libpcap来完成,其次你要完成的最重要的一步就是怎么根据端口号找到进程的pid。端口号通过截取的数据包可以获得,这个时候你要按行来解析/proc/net/tcp (如果要支持ipv6的话还要解析/proc/net/tcp6),这个文件记录了当前活跃的TCP连接情况,每一行代表一条连接,我们感兴趣的是其中的inode这一项,你得把inode的值解析出来保存。然后蛋疼的时候来了,接下来你得遍历所有的/proc/pid/fd文件,察看其中每一个文件描述符,如果发现内容为socket[xxxx]的,把xxxx截取出来,这个xxxx也是inode号,如果和你之前解析/proc/net/tcp的inode号吻合,恭喜你,这说明这个pid和那个tcp连接有关系,进而也就确定了端口号和pid的对应关系,也就知道了数据包和进程之间的对应关系了。


我的建议:

  1. 先看看http://www.tcpmp.org/pcap.html, 熟悉一下libpcap库的用法,怎么截取数据包。

  2. 自己看看/proc/net/tcp的内容,想想怎么做文本解析,除了inode外,源ip,源端口号,目的ip,目的端口号都可以解析出来,而这个四元组实际就代表了一条tcp连接。

  3. 想想怎么做数据包,连接,进程的老化超时处理。比如说,当前截取的到的数据包在统计过一次流量后,下一次就不应该再计入了,怎么处理?一条连接长时间没有任何数据包的交互,怎么老化掉?一个进程长时间没有数据包的交互,甚至用户给关闭了,你的程序如何感知?libpcap截取到数据包后会给你提供截取到的时间戳,好好利用这个时间戳就可以办到。

  4. 最后,以数据包 -> 连接 -> 进程 的关系来思考会有助于你的程序设计,一条连接可以有N个数据包,一个进程可以有N条连接。这么一想,这3个结构体或者类就能定义好了。剩下的自己琢磨琢磨。

阅读全文

与linux进程的网络流量相关的资料

热点内容
苹果控制点安卓怎么设置 浏览:64
顺丰app里面哪里缴费 浏览:892
鱼池活水能增加密度吗 浏览:245
如何将安卓导入已激活苹果 浏览:499
电脑写程序编译不了 浏览:538
linux限制用户命令 浏览:742
8p咋设置应用加密 浏览:286
我说你这个我听是什么安卓 浏览:23
云计算算程序员吗 浏览:786
vim编译php 浏览:527
如何正确使用国家反诈中心app 浏览:181
编译执行方式的过程 浏览:489
当量计算法的适用条件 浏览:445
arm单片机开发环境 浏览:401
小米怎么调文件夹大小 浏览:339
程序员怒吼视频 浏览:810
加密货币的发展情况如何 浏览:71
java泛型编译原理 浏览:962
足球23关算法 浏览:736
我的世界手机基岩版为什么进不了服务器 浏览:732