1

少し奇妙な問題があり、誰かがこれを手伝ってくれることを本当に願っています:

私は大学に通っており、ここのワイヤレス ネットワークはログインごとに特定のクォータ/週を発行します (私の場合は 2GB です)。これは、毎週 2 GB のインターネットにしかアクセスできないことを意味します。アップロードとダウンロードの合計は最大 2 GB でなければなりません (残りのクォータを示すWeb ページへのアクセスが許可されています)。私は通常、数 KB の猶予を与えられていますが、この問題については考慮しません。

私のラップトップは Ubuntu を実行しており、conky システム モニターがインストールされています。これは、残りのワイヤレス クォータを (とりわけ) 表示するように構成されています。もともと、私はウェブページgrep残りのクォータをコンキーヒットさせていました。ただし、conky は 5 秒ごとに更新され、12 時間以上ワイヤレス接続を使用しているため、Web ページ自体をチェックすると、ワイヤレス クォータが失われます。

この問題を解決するには、次の 2 つの方法のいずれかを実行できると考えました。

  1. ウェブページにアクセスする頻度を大幅に減らして、クォータが失われないようにします。
  2. ワイヤレス カードでワイヤレス トラフィックを監視し、2GB から引き続けます

(1)これまでに行ったことです。毎分Webページにアクセスし、結果をローカルファイルシステムのファイルに保存するようにcronジョブをセットアップしました。次に、Conky がこのファイルを読み取ります。Web ページにアクセスする必要はありません。conky のおかげで、ワイヤレス クォータが失われることはありません。

この解決策は 12 倍勝っていますが、まだ十分ではありません。ただし、私はリアルタイム データのファンなので、これ以上 cron の頻度を減らすつもりはありません。

したがって、私が持っている他の唯一の解決策は(2)です。これは、私がwiresharkについて知り、それがコマンドラインバージョンのtsharkであることを知ったときです。今、私がすべきだと思うことは次のとおりです。

  1. tshark をデーモン化する
  2. tshark を設定して、ワイヤレス カードを流れるトラフィックの量 (KB または B または MB 単位 - 後で変換できます) を監視します。
  3. このトラフィック情報を file1 に追加し続けます
  4. file1 のトラフィック情報を合計し、2GB から差し引きます。結果を file2 に格納します
  5. file2 を読み取るように conky を設定します。これが私の残りのクォータです。
  6. 毎週月曜日の午前 6 時 30 分にファイル 1 の内容を削除/消去する cron ジョブをセットアップします (このとき、毎週のクォータがリセットされます)。

最後に、私の質問:

  1. これを行うためのより良い方法が見えますか?
  2. そうでない場合、どのようにtsharkをセットアップして、私が望むようにしますか? 他に必要なスクリプトは何ですか?

それが役立つ場合、Web サイトには残りのクォータが KBであると表示されます

私はすでにtshark man pageを見てきましたが、残念ながら私にはほとんど意味がありません。私は network-n00b です。

前もって感謝します。

4

1 に答える 1

0

興味深い質問です。私はtsharkを使用した経験がないので、個人的にはiptablesを使用してアプローチします。

見つめている:

[root@home ~]# iptables -nvxL | grep -E "Chain (INPUT|OUTPUT)"
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
Chain OUTPUT (policy ACCEPT 9763462 packets, 1610901292 bytes)

iptables各チェーンを通過するバイトの集計が保持されていることがわかります。したがって、おそらく次の方法で帯域幅の使用状況を監視できます。

  1. システムが起動したら、Web から残りのクォータを取得します
  2. iptablesのバイト数をゼロにする(-zオプションを使用)
  3. X 秒ごとに、iptablesから使用状況を取得し、クォータから差し引きます

IP アカウンティングに iptables を使用する例をいくつか示します。

注意事項

このアプローチにはいくつかの欠点があります。まず第一に、iptablesを実行するには root アクセスが必要です。つまり、conky を root として実行するか、conky がアクセスできるファイルに現在の値を書き込む cron デーモンを実行する必要があります。

また、すべての INPUT/OUTPUT パケットが帯域幅の割り当てにカウントされるわけではありません (イントラネット アクセス、DNS など)。それらを照合し、別のiptablesチェーンに配置することで、関連する接続のみを除外できます (上記のリンクの例)。より簡単なアプローチ (格差が大きすぎない場合) は、時々 Web からリアルタイム クォータを取得し、値をリセットしてからやり直すことです。

また、複雑な、またはカスタムチェーンを使用する既存のiptablesルールがある場合は、少し注意が必要です。正しい値を取得するには、 iptablesに関する知識が必要になります。

于 2011-02-07T10:40:28.367 に答える