0

我很清楚以前有人问过这个问题的变体,但我仍然没有找到特别好的答案。

我要做的是编写一个 Python 脚本,该脚本将测量当前的带宽使用情况以及进程及其所有子进程上传/下载的总字节数,如果这些值中的任何一个超过用户定义的阈值,则将其终止。其目的是限制备份客户端的网络使用。

我考虑了几个测量进程带宽的选项:

  • bwmon完全符合我的要求,但令人沮丧的是,它以目前的形式对我不起作用。问题是它依赖于读取bytes=packets=字段/proc/net/ip_conntrack来测量带宽。出于某种原因,这些字段对我来说根本不存在——我怀疑它可能是为了做不同的内核版本。

  • 目前我发现的最可行的解决方案是strace -e trace=recvfrom,sendto -p <PID>根据这个建议解析输出。但是,这有点混乱并引发了令人讨厌的权限问题 - 为了附加到我需要的现有进程sudo strace,我更愿意避免从脚本中以超级用户权限运行 shell 命令。

我想知道是否有人有更优雅的建议?

我对 的内容不是很熟悉/proc,但是如果有一些其他日志文件会列出数据包大小和计数,那么我也许可以修改bwmon为使用它。

4

1 回答 1

3

不是与编程相关的答案,而是:尝试这样做:

sudo modprobe ip_conntrack
sysctl -w net.netfilter.nf_conntrack_acct=1

全局启用模块和 sysctl 设置是特定于发行版的,但至少在您重新启动之前,bwmon如果需要bytes并且packets/proc/net/ip_conntrack.

基于http://ubuntuforums.org/showthread.php?t=2046187http://forums.gentoo.org/viewtopic-p-6677939.html(最终在 Google 上)。

于 2012-08-24T09:30:16.170 回答