Я использую этот скрипт, который фактически проверяет скорость входящих пакетов, и он срабатывает, если скорость достигает 5 Мбит / с или более. Затем пакеты записываются в файл 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 отброшено ядром.
Теперь я хочу знать, что выходной файл на самом деле не сказал бы мне скорость атаки, например, если бы она была 300 Мбит / с или как? Итак, 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 секунда. Я считаю, что «sleep 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.
Теперь это результат после того, как вы изменили скрипт с помощью «сна 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