1

ネットワークの送受信パケット数をリアルタイムとCLIでカウントしたい(カウントを利用してシェルスクリプトを書きたい)

'tcpdump' と 'tsahrk' をパイプラインと組み合わせて使用​​しようとしていますが、うまくいきません (才能と学習がほとんどありません)。

最後に、コマンド「dumpcap」を見つけました。これは私のニーズにほぼ近いものです。これが dumpcap stdout です。

[root@hostname ~]# dumpcap -i eth0
File: /tmp/wiresharkXXXXuTE8mU
Packets: 31

このコマンドを「grep」と組み合わせて使用​​すると、「dumpcap -i eth0 | grep -o '[0-9]*' を使用して stdout(31) の数値をフィルタリングしますが、それでも機能しません。

これを解決する方法またはこれに対するアイデアはありますか??

この度はご清聴ありがとうございました。

4

2 に答える 2

0

tcpdump、TShark、または dumpcap などのパケット キャプチャ プログラムは、おそらくインターフェイスをプロミスキャス モードにします。これは、通常の状況で表示されるよりも多くのパケットが表示されることを意味します。

dumpcap のカウントは、標準出力ではなく、標準エラーに送られます。

Dumpcap は問題のファイルにパケットを書き込みます。大量のトラフィックがある場合、そのファイルはどんどん大きくなり続け、/tmp がオンになっているファイル システムでより多くのスペースを占有します。

Linux の ifconfig やさまざまな OS の netstat など、通常のネットワーク スタックから統計情報を取得するだけのツールを検討することをお勧めします。

$ netstat -w 1 -I en0
            input          (en0)           output
   packets  errs      bytes    packets  errs      bytes colls
         0     0          0          0     0          0     0
         0     0          0          0     0          0     0
         1     0         98          1     0         98     0
         1     0         98          1     0         98     0

                      ...
于 2013-03-20T18:54:50.450 に答える
0

私のコンピューターでの次の出力に基づいています。

ifconfig eth0 | grep RX
      RX packets:113995 errors:0 dropped:0 overruns:0 frame:0
      RX bytes:62022831 (62.0 MB)  TX bytes:11453699 (11.4 MB)

RX パケットの数を取得するには、次のようにします。

ifconfig eth0 | grep "RX packets" | tr ":" " " | awk '{print $3}'
113995

残念ながら、正確に何が必要なのかは明確ではありません。「リアルタイムでパケット数をカウントする」とはどういう意味ですか? カウンタをインクリメントし、パケットが見られるたびにカウンタの値を報告しますか? それとも、特定の期間内に見られたパケットの数を数えたいだけですか? また、シェル スクリプトの最終的な目標は何ですか?

于 2013-03-19T23:58:35.190 に答える