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