Супер-мини-биллинг на базе 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 адресам, таблицы по классу трафика, таблицы классификаторов по портам назначения и так далее.... исходящий траффик: mysql> select sum(bytes),INET_NTOA(src_ip) from ip where INET_NTOA(src_ip) like '1.1.1.%' and from_unixtime(stime) like '2010-03-29%' group by INET_NTOA(src_ip); +------------+-------------------+ | sum(bytes) | INET_NTOA(src_ip) | +------------+-------------------+ | 1956696 | 1.1.1.133 | | 1113006 | 1.1.1.154 | | 939274 | 1.1.1.160 | | 1131923 | 1.1.1.166 | | 376170 | 1.1.1.180 | | 547850 | 1.1.1.185 | | 629329 | 1.1.1.190 | | 235883 | 1.1.1.2 | +------------+-------------------+ 8 rows in set (0.15 sec) входящий траффик: mysql> select sum(bytes),INET_NTOA(dst_ip) from ip where INET_NTOA(dst_ip) like '1.1.1.%' and from_unixtime(stime) like '2010-03-29%' group by INET_NTOA(dst_ip); +------------+-------------------+ | sum(bytes) | INET_NTOA(dst_ip) | +------------+-------------------+ | 934853 | 1.1.1.133 | | 17862295 | 1.1.1.154 | | 4447158 | 1.1.1.160 | | 1647777 | 1.1.1.166 | | 3803635 | 1.1.1.180 | | 2137449 | 1.1.1.185 | | 2429854 | 1.1.1.190 | | 66221 | 1.1.1.2 | | 64162 | 1.1.1.255 | +------------+-------------------+ 9 rows in set (0.14 sec) mysql> детальный отчет по траффику для адреса: mysql> select sum(bytes),INET_NTOA(src_ip),INET_NTOA(dst_ip),src_port from ip where from_unixtime(stime) like '2010-03-29%' and INET_NTOA(dst_ip)='1.1.1.154' group by src_port order by sum(bytes) desc limit 10; +------------+-------------------+-------------------+----------+ | sum(bytes) | INET_NTOA(src_ip) | INET_NTOA(dst_ip) | src_port | +------------+-------------------+-------------------+----------+ | 15561316 | 205.188.83.18 | 1.1.1.154 | 80 | | 1438976 | 212.98.168.43 | 1.1.1.154 | 110 | | 551726 | 64.12.30.52 | 1.1.1.154 | 443 | | 114022 | 74.125.39.109 | 1.1.1.154 | 995 | | 66145 | 86.57.255.37 | 1.1.1.154 | 24555 | | 39980 | 1.1.1.2 | 1.1.1.154 | 53 | | 16007 | 130.88.166.196 | 1.1.1.154 | 16718 | | 12684 | 81.25.41.194 | 1.1.1.154 | 26140 | | 10231 | 93.84.1.120 | 1.1.1.154 | 21419 | | 7889 | 87.247.22.203 | 1.1.1.154 | 15405 | +------------+-------------------+-------------------+----------+ 10 rows in set (0.11 sec)
Warning: Cannot modify header information - headers already sent by (output started at /var/www/thesuki.org/dokuwiki/inc/Action/Export.php:106) in /var/www/thesuki.org/dokuwiki/inc/actions.php on line 38
shitbox:ipcad [SukuDokuWiki]

User Tools

Site Tools


shitbox:ipcad

Супер-мини-биллинг на базе 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 адресам, таблицы по классу трафика, таблицы классификаторов по портам назначения и так далее….

исходящий траффик:

mysql> select sum(bytes),INET_NTOA(src_ip) from ip where INET_NTOA(src_ip) like '1.1.1.%' and from_unixtime(stime) like '2010-03-29%' group by INET_NTOA(src_ip);
+------------+-------------------+
| sum(bytes) | INET_NTOA(src_ip) |
+------------+-------------------+
|    1956696 | 1.1.1.133         |
|    1113006 | 1.1.1.154         |
|     939274 | 1.1.1.160         |
|    1131923 | 1.1.1.166         |
|     376170 | 1.1.1.180         |
|     547850 | 1.1.1.185         |
|     629329 | 1.1.1.190         |
|     235883 | 1.1.1.2           |
+------------+-------------------+
8 rows in set (0.15 sec)

входящий траффик:

mysql> select sum(bytes),INET_NTOA(dst_ip) from ip where INET_NTOA(dst_ip) like '1.1.1.%' and from_unixtime(stime) like '2010-03-29%' group by INET_NTOA(dst_ip);
+------------+-------------------+
| sum(bytes) | INET_NTOA(dst_ip) |
+------------+-------------------+
|     934853 | 1.1.1.133         |
|   17862295 | 1.1.1.154         |
|    4447158 | 1.1.1.160         |
|    1647777 | 1.1.1.166         |
|    3803635 | 1.1.1.180         |
|    2137449 | 1.1.1.185         |
|    2429854 | 1.1.1.190         |
|      66221 | 1.1.1.2           |
|      64162 | 1.1.1.255         |
+------------+-------------------+
9 rows in set (0.14 sec)

mysql>

детальный отчет по траффику для адреса:

mysql> select sum(bytes),INET_NTOA(src_ip),INET_NTOA(dst_ip),src_port from ip where from_unixtime(stime) like '2010-03-29%' and INET_NTOA(dst_ip)='1.1.1.154' group by src_port order by sum(bytes) desc  limit 10;
+------------+-------------------+-------------------+----------+
| sum(bytes) | INET_NTOA(src_ip) | INET_NTOA(dst_ip) | src_port |
+------------+-------------------+-------------------+----------+
|   15561316 | 205.188.83.18     | 1.1.1.154         |       80 |
|    1438976 | 212.98.168.43     | 1.1.1.154         |      110 |
|     551726 | 64.12.30.52       | 1.1.1.154         |      443 |
|     114022 | 74.125.39.109     | 1.1.1.154         |      995 |
|      66145 | 86.57.255.37      | 1.1.1.154         |    24555 |
|      39980 | 1.1.1.2           | 1.1.1.154         |       53 |
|      16007 | 130.88.166.196    | 1.1.1.154         |    16718 |
|      12684 | 81.25.41.194      | 1.1.1.154         |    26140 |
|      10231 | 93.84.1.120       | 1.1.1.154         |    21419 |
|       7889 | 87.247.22.203     | 1.1.1.154         |    15405 |
+------------+-------------------+-------------------+----------+
10 rows in set (0.11 sec)
shitbox/ipcad.txt · Last modified: 2010/03/29 07:58 by slayer