2013-03-19 54 views
1

我希望計算實時和CLI中的網絡傳入/傳出的數據包數量(我想用計數寫shell腳本)計數的網絡數據包的實時(CLI)的數量

我嘗試使用'tcpdump'和'tsahrk'結合管道,但它不起作用(我沒有什麼天分和學習)。

最後,我找到了命令「dumpcap」,這幾乎接近我的需要,這裏是dumpcap標準輸出

[[email protected] ~]# dumpcap -i eth0 
File: /tmp/wiresharkXXXXuTE8mU 
Packets: 31 

當我使用這個命令與「grep」可以,像這樣的「dumpcap -i eth0的結合| grep -o'[0-9] *'過濾stdout(31)中的數字,但它仍然不起作用。

他們有什麼辦法解決這個或任何想法?

非常感謝您對此事的關注。

回答

0

數據包捕獲程序(如tcpdump,TShark或dumpcap)可能會將接口置於混雜模式,這意味着更多的數據包將顯示出比在正常情況下顯示的更多的數據包。

dumpcap中的計數變爲標準錯誤,而不是標準輸出。

Dumpcap會將數據包寫入有問題的文件,您可能會也可能不想;如果流量很大,那麼該文件會越來越大,並佔用文件系統上更多空間/ tmp處於打開狀態。

你可能要考慮一些工具,只是會從常規網絡堆棧的統計數據,如使用ifconfig在Linux或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 

         ... 
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 

不幸的是這是不太清楚究竟它是你需要的。 「計算實時數據包的數量」是什麼意思?你是否想要一個計數器遞增,並且只要看到一個數據包就報告計數器的值?或者你只是想計算在給定時間內看到多少包?你的shell腳本的最終目標是什麼?