Супер-минимакси-биллинг на базе Linux+MySQL+ipcad


Делаем так:

1. создаём базу
mysql> create database ip_base;

2. создаём таблицу
mysql> use ip_base;
CREATE TABLE `ip` (
`src_ip` int(10) unsigned,
`dst_ip` int(10) unsigned,
`packets` smallint(5) unsigned,
`bytes` int(10) unsigned,
`src_port` smallint(5) unsigned,
`dst_port` smallint(5) unsigned,
`proto` smallint(5) unsigned,
`iface` char(6),
`stime` int(15) );

3. ставим ipcad (www.spelio.net.ru/soft/) и пишем ему похожий конфиг:
###
# cat /usr/local/etc/ipcad.conf
capture-ports enable;
interface eth1 promisc; # здесь указываем интерфейс смотрящий во внутреннюю сеть с юзерами
rsh enable at localhost;
rsh root@localhost admin;
memory_limit = 32m; # не рекомендую ставить больше 1/8 от всей памяти
dumpfile = /var/log/ipcad.dump;
rsh ttl = 4;
rsh timeout = 30;
###

4. кладём в каталог скажем /adm/traffic
такие скрипты:
# cat ip.awk
(NF==8 && length($1)>=7){
print "insert into ip values(inet_aton(\"" \
$1"\"),inet_aton(\"" \
$2"\")," \
$3"," \
$4"," \
$5"," \
$6"," \
$7",\"" \
$8"\",unix_timestamp());"
}
###
# cat ipcad.sav
#!/bin/sh
rsh localhost show ip acco > /var/log/ipcad.log
rsh localhost clear ip acco > /dev/nul
/bin/awk -f /adm/traffic/ip.awk /var/log/ipcad.log | /usr/bin/mysql -pPASSWORD ip_base
#

5. Прописываем в /etc/crontab строчку
0,15,30,45 * * * * root run-parts /etc/cron.15min
не забыв создать mkdir /etc/cron.15min и перезапустить crond
service crond restart

6. делаем линк
ln -s /adm/traffic/ipcad.sav /etc/cron.15min/

7. Ждём пока база начнёт наполняться и смотрим её при помощи запросов mysql:
select sum(bytes) from ip where inet_ntoa(dst_ip)='192.168.111.222' and stime>unix_timestamp('2005-04-20 15:00:00'); - трафик пришедший на пользователя с ip 192.168.111.222 после 15:00 20 апреля 2005 года

Далее фантазия безгранична... таблицы соответствия имен пользователй ip адресам, таблицы по классу трафика, таблицы классификаторов по портам назначения и так далее....

Всё!

Успехов...
ежли кому стало интересно - пишите на sergkz(at)sayan.ru