0

この質問のバリエーションが以前に尋ねられたことはよく知っていますが、特に良い答えはまだ見つかりません.

私がやろうとしているのは、現在の帯域幅の使用と、プロセスとそのすべての子によってアップロード/ダウンロードされた合計バイト数を測定し、これらの値のいずれかがユーザー定義のしきい値を超えた場合にそれを強制終了する Python スクリプトを作成することです。その目的は、バックアップ クライアントのネットワーク使用を制限することです。

プロセス帯域幅を測定するためのいくつかのオプションを検討しました。

  • bwmon私が望んでいることを正確に実行しますが、イライラすることに、現在の形式では機能しません。問題は、帯域幅を測定するために読み取りbytes=packets=フィールドに依存していることです。/proc/net/ip_conntrack何らかの理由で、これらのフィールドは私には存在しません-異なるカーネルバージョンを実行するためではないかと思います。

  • 現在、私が見つけた最も実行可能な解決策は、この提案strace -e trace=recvfrom,sendto -p <PID>に従っての出力を解析することです。ただし、これは少し面倒で、アクセス許可の問題が発生します。既存のプロセスにアタッチするには、必要があります。また、スクリプト内からスーパーユーザー権限でシェル コマンドを実行することは避けたいと考えています。sudo strace

誰かがよりエレガントな提案を持っているのだろうか?

の内容にはあまり詳しくありませんが/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=2046187およびhttp://forums.gentoo.org/viewtopic-p-6677939.htmlに基づいています (したがって、最終的には Google に基づいています)。

于 2012-08-24T09:30:16.170 に答える