tcpdump – 如何检查数据包的速度?

我使用这个脚本实际上检查传入数据包的速率,如果速率达到5mbps或更多,它会被触发。 数据包然后被logging到一个tcpdump文件。

interface=eth0 dumpdir=/tmp/ while /bin/true; do pkt_old=`grep $interface: /proc/net/dev | cut -d : -f2 | awk '{ print $2 }'` sleep 1 pkt_new=`grep $interface: /proc/net/dev | cut -d : -f2 | awk '{ print $2 }'` pkt=$(( $pkt_new - $pkt_old )) echo -ne "\r$pkt packets/s\033[0K" if [ $pkt -gt 5000 ]; then echo -e "\n`date` Under attack, dumping packets." tcpdump -n -s0 -c 2000 -w $dumpdir/dump.`date +"%Y%m%d-%H%M%S"`.cap echo "`date` Packets dumped, sleeping now." sleep 300 fi done 

输出是像2000个数据包捕获。 由内核收到的XXX和XXX-(减)2000包的XXX包。

现在我想知道的是,输出文件实际上不会告诉我,如果是300mbps或什么的攻击速度? 那么filter收到的XXX数据包是每秒? 如果不是,我该如何检查,因为我的港口有时会饱和。

更新:

我使用了一个程序通过上面的脚本从捕获的文件中捕获统计信息。 这是我得到的:

 root@$:/tmp/dumps# capinfos dump.20130621-174506.cap File name: dump.20130621-174506.cap File type: Wireshark/tcpdump/... - libpcap File encapsulation: Linux cooked-mode capture Number of packets: 2000 File size: 2065933 bytes Data size: 2033909 bytes Capture duration: 43 seconds Start time: Fri Jun 21 17:45:06 2013 End time: Fri Jun 21 17:45:49 2013 Data byte rate: 46968.49 bytes/sec Data bit rate: 375747.94 bits/sec Average packet size: 1016.95 bytes Average packet rate: 46.19 packets/sec 

我相信攻击可能只持续了15-20秒,而捕获的信息是43秒,所以这里的数据位速率可能是从这个总时间平均的。 这里有什么可以帮助的是,如果有人可以编辑上面的原始脚本,而不是捕获2000个数据包并丢弃剩余的数据包,捕获所有数据包的时间为阈值命中5秒。

更新:

如上所述,改变了脚本之后,看起来好像文件被损坏了,因为我在Wireshark中读到这个文件,里面写着:“捕获文件似乎在一个包的中间被缩短了。 这是来自capinfos的输出:

 capinfos: An error occurred after reading 3085 packets from `"dump.20130710-215413.cap": Less data was read than was expected. 

第二次尝试时,只有当我在脚本的控制台中按Ctrl + C时,才能够读取该文件:

 capinfos dump.20130710-215413.cap File name: dump.20130710-215413.cap File type: Wireshark/tcpdump/... - libpcap File encapsulation: Linux cooked-mode capture Number of packets: 18136 File size: 2600821 bytes Data size: 2310621 bytes Capture duration: 591 seconds Start time: Wed Jul 10 21:54:13 2013 End time: Wed Jul 10 22:04:04 2013 Data byte rate: 3909.73 bytes/sec Data bit rate: 31277.83 bits/sec Average packet size: 127.41 bytes Average packet rate: 30.69 packets/sec 

通知捕获持续时间591秒。 我相信'睡眠300'有一些事情要做,因为我看到控制台输出。 这个输出是用'-c 2000'选项:

 ./Log.sh 10275 packets/s Wed Jul 10 12:41:31 MSD 2013 Under attack, dumping packets. tcpdump: listening on venet0, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes 2000 packets captured 100012 packets received by filter 98003 packets dropped by kernel Wed Jul 10 12:42:34 MSD 2013 Packets dumped, sleeping now. 

现在这是用'sleep 5'修改脚本之后的输出:

 ./Log.sh 24103 packets/s Wed Jul 10 21:54:13 MSD 2013 Under attack, dumping packets. tcpdump: listening on venet0, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes Wed Jul 10 21:54:18 MSD 2013 Packets dumped, sleeping now. 1620 packets/sroot@nl:~# 18136 packets captured 1850288 packets received by filter 1832106 packets dropped by kernel ^C 

注意我按Ctrl + C来打破睡眠函数,我猜是哪个文件可以读取。

capinfos是你在找什么:

 $ capinfos ddos.cap File name: ddos.cap File type: Wireshark/tcpdump/... - libpcap File encapsulation: Ethernet Packet size limit: file hdr: 65535 bytes Number of packets: 1000000 File size: 189073212 bytes Data size: 173073188 bytes Capture duration: 2 seconds Start time: Fri Jul 5 16:35:04 2013 End time: Fri Jul 5 16:35:07 2013 Data byte rate: 69839025.27 bytes/sec Data bit rate: 558712202.18 bits/sec Average packet size: 173.07 bytes Average packet rate: 403523.08 packets/sec SHA1: 34d758e6445061855ca4397729098f469f411fe3 RIPEMD160: 14f430231fc2962cd86ddb8edb8daf75a5d07af8 MD5: 5893809fb02d1a20997629a9a501842b Strict time order: False 

注意数据比特率


这里有什么可以帮助的是,如果有人可以编辑上面的原始脚本,而不是捕获2000个数据包并丢弃剩余的数据包,捕获所有数据包的时间为阈值命中5秒。

这个怎么样:

 tcpdump -n -s0 -w $dumpdir/dump.`date +"%Y%m%d-%H%M%S"`.cap & sleep 5 && pkill -HUP -f /usr/sbin/tcpdump