Последний отсчет Дмитрий Докучаев aka Forb Xakep, номер #052, стр. 052-068-2 for(1..$count) { $num = $num / 1024 } ## Выполним деление на 1024 для выяснения трафика $num=sprintf("%.2f",$num); ## И округлим до двух чисел после запятой print "$what $num $pref","bytes\n"; ## Выводим результат } } Вот этот маленький скрипт будет выдавать тебе значения текущего трафика. Но помнишь, я упомянул об обнулении правил по истечении суток? И не надейся, что я буду тебе расписывать ежедневный дамп статистики в файлах - это ты сделаешь сам, благо опыта у тебя уже много. А вот отправку на мыло, оптимальный и самый легкий вариант, я предусмотрел. Для этого тебе потребуется накатать еще один скрипт sendstat.sh, на этот раз на языке sh. #!/bin/sh /root/trafstat/stat.pl | mail -s 'Traffic statistic' root@localhost /root/trafstat/stat.pl -z Как ты уже понял, задача этого скрипта - выполнить подсчет статистики за данный период и намылить его руту. Затем еще раз запустить этот же скрипт, но с параметром -z, чтобы сбросить счетчики на правилах. Задумаемся над вопросом, как и когда запускать этот sh’шный скрипт. Все просто! На помощь придет cron, в котором нужно задать правило, которое будет выполняться в 23:59 каждый день. Я надеюсь, ты работал с кроном. Если нет, то слушай сюда :). Выполни команду crontab -e под рутом (иначе скрипт просто не сможет обратиться к фаерволу). Таким образом ты войдешь в среду vi редактора. Там нажимаешь "i", тем самым войдя в режим вставки (INSERT), и вписываешь следующую строку: 59 23 * * * /root/trafstat/sendstat.sh >/dev/null 2>&1 Затем корректно выходим комбинацией клавиш: ESC, :wq, Enter. Внимание, на sendstat.sh не забудь установить атрибут 755, иначе все твои усилия пропадут даром. >/dev/null 2>&1 - не какие-то марсианские знаки, которые иногда отбрасывают, мотивируя тем, что не знают, что они означают :). Это необходимо, чтобы STDOUT и STDERR при выполнении скрипта не уходили на мыло руту. Зачем тебе лишний локальный спам? Его хватает из глобала... Считаем внешними программами Если вдруг так случилось, что по каким-то причинам заюзать ipfw ты не можешь (как было у меня на FreeBSD 4.3, когда из-за ipfw машина загадочно подвисала к полуночи), можешь доверить подсчет трафика внешним софтинам. Как я уже сказал, банальное снифание сетевого интерфейса помогает достичь нужного результата в подсчете трафика. Если же ты виртуоз, можешь заюзать даже tcpdump и парсить из него суммарную статистику :), но есть софтины, которые проделают эту грязную работу за тебя. Я долго определялся, какой софт выбрать, и решил остановиться на argus. Испытываемая версия - 2.0.5. Недолго думая, сливаем это творение по ссылке http://qosient.com/argus/src/argus-2.0.5.tar.gz. Распаковываем, конфигурим, собираем. Все как обычно, ничего нового. Затем наступает интересная процедура редактирования argus.conf. Вот так выглядит мой конфигурационный файл: ARGUS_DAEMON=yes ARGUS_BIND_IP="" ARGUS_INTERFACE="fxp1" ARGUS_OUTPUT_FILE=/usr/local/argus/argus.out ARGUS_SET_PID=yes ARGUS_GO_PROMISCUOUS=yes ARGUS_FLOW_STATUS_INTERVAL=30 ARGUS_MAR_STATUS_INTERVAL=60 |