>>Долго роясь в инете и получая подзатыльники за вопрос как можно сделать
>>скрипт а не прогу чтобы свободно снимать счетчики минуя БД...скидывать на
>>файл....для выделенки ~128 кб/с сделал все же....думаю что то что надо!
>>
>>кому надо мыльте ..скину скрипт с подробным объяснением или в форуме кину...
>>
>Абсолютно бесплатно..спояснениями....
>1. значит лезешь в rc.firewall где лежат правила для твоего IPFW(если у
>тебя не ipfw вопрос разу отваливается)
>к примеру 100 add count tcp from ant to ${внешний ip} in
>via ${внешний интерфейс}
>2. проверяешь...#: ipfw s 100 (команда для показа 100 правила..получаешь типа 00100
>34 245 count tcp ......)
>3.если все работает пишешт такой скрипт:
>#! /usr/bin/perl
>$file="/var/log/counts/allin.txt";
>#затем открываешь файл
>open FF, "<$file";
>#обзываешь переменную для снятия содержимого файла
>$s=<FF>;
>close(FF);#закрываем файл для чтения
>#затем приступаешь не посредственно к правилу(кавычки не простые как эти -> ' а #консольные ` (нажатие клавиши тильда (тама 'ё' написанно)
>$r1=`/sbin/ipfw s 100`;
>#затем пилим полученные резальтат в массив через пробел(то есть все значения #разбиваются
>по пробелам
>@s1=split(/ /,$r1);
>#получаем элементы массива вида: нулевой 00100, первый 17, второй(он нас и #интересует)
>1152 , третий count , ... tcp, ... from, ... any,
>.... to.....и т.д.
>#тут есть одно но....когда счетчики равны 0 то все элементы строки идут
>через #пробел..поэтому проблем в снятии второго элемента массива нет.....но когда #счетчики
>становятся не нулевыми то почему то число пробелов между ними #достигает
>трех и далее....
>#поэтому минуя тяжелые вычислении через условия этого второго счетчика я решил #посчитать
>все элементы масива и вычесть с конца кол-во элемнтов до счетчика
>
>#00100 17 1152 count tcp from xxx.xxx.xxx.xxx to any in recv ed0
>получаем что 1152 будет #10 элементом с конца..... пишем
>$i=@s1; #вычисляем все количество элементов
>$z=$s1[$i-10];#находим в массиве счетчик как 10 элемент с конца
>open FF, ">$file";#открыаем файл на чтение
>$traff=$s+$z;#прибавляем к старой переменной (считанной раннее из файла) новую
>print FF $traff; #перезаписываем счетчик в файле(миссия выполнена);
>close(FF);#закрываем файл
>$flush=`/sbin/ipfw z 100`;#Обнуляем счетчик
>split(/ /, $flush);#Обнуляем счетчик
в конце такая строчка//open FF, ">$file";#открыаем файл на чтение
ошибочка: не открываем файна чтение а открываем файл на запись
|