FastNetMon

Thursday, 23 April 2015

Сжатие результатов захвата трафика tcpdump в потоковом режиме

Есть два подхода к данной задаче - использовать потоковое сжатие в один файл либо использовать встроенную функцию ротации и ротировать файлы по достижении определенного объема.

Начнем с потокового сжатия:
screen
tcpdump -i venet0 -n -w - | bzip2 -c > /root/tcpdump_23apr.pcap.bz2
ctrl+a d

Как остановить сбор:
killall tcpdump

НЕЛЬЗЯ останавливать сбор данных по CTRL+C, это побьет архив!

Читаем собранный файл:
bzcat /root/tcpdump_23apr.pcap.bz2 | tcpdump -n -r -

На мой взгляд более предпочтительна ротация силами tcpdump (ротируем как только дойдет до 100 мб файл):
screen
mkdir /root/whole_server_dump
tcpdump -i venet0 -n -w /root/whole_server_dump/pcap_dump -C 100 -z bzip2
На CentOS же может понадобиться указать флаг -z root, чтобы не было понижения прав, которое приведет к ошибке записи в файл:
 tcpdump -i eth0 -n -w /root/whole_server_dump/pcap_dump -C 100 -z bzip2 -Z root

В итоге через некоторое время в текущей папке будут созданы вот такие файлы:
-rw-r--r--  1 root root  28M Apr 23 11:31 pcap_dump1.bz2
-rw-r--r--  1 root root  24M Apr 23 11:32 pcap_dump2.bz2
-rw-r--r--  1 root root  23M Apr 23 11:32 pcap_dump3.bz2
-rw-r--r--  1 root root  71M Apr 23 11:33 pcap_dump4
-rw-r--r--  1 root root  39M Apr 23 11:31 pcap_dump.bz2
Также вместо bzip2 можно попробовать использовать lzma, который потенциально может сжимать лучше, но в конкретно моем случае процессор не успевал сжимать файлы с приемлемой скоростью.


Итак, стандартный bzip2 выдал мне сжатие в 4 раза ровно, попробуем включить его самый жесткий режим.
vim /usr/bin/bzip2_best
#!/bin/bash
/bin/bzip2 -9 "$@"
chmod +x /usr/bin/bzip2_best
После этого указываем этот скрипт как аргумент для -z. Но в моем случае это не дало никакого особого толку - сила сжатия не увеличилась.

No comments :

Post a Comment

Note: only a member of this blog may post a comment.