Интересует такая схема работы abills как подсчет трафика по подсетям, без предварительной авторизации пользователей.
Настрокил ipn, но если указать в модуле dv для юзера подсеть большую чем 255,255,255,255 то никакого действия не происходит, трафик обсчитывается только для залогиненого юзера и только с одного ип адреса. Логинить всех юзеров вручную это не выход.
Вопрос такой, умеет ли abills просто вести подсчет трафика с разбивкой по подсетям?
Подсчет трафика на виланах без автризации пользователей
Abills не умеет считать для подсети.
Патч для Abills/mysql/Ipn_Collector.pm
@@ -119,7 +119,8 @@
tp.octets_direction,
u.reduction,
CONNECT_INFO,
- u.activate
+ u.activate,
+ netmask
FROM (dv_calls calls, users u)
LEFT JOIN companies c ON (u.company_id=c.id)
LEFT JOIN bills b ON (u.bill_id=b.id)
@@ -162,8 +162,14 @@
$self->{0}{OUT}=0;
foreach my $line (@$list) {
#UID
- $ips{$line->[1]} = $line->[0];
+ for (my $ip = int($line->[1]) & $line->[16];;) {
+ $ips{$ip++} = $line->[0];
+ last if ($ip & $line->[16]) != (($ip - 1) & $line->[16])
+ }
#IN / OUT octets
$self->{$line->[1]}{IN} = $line->[4];
Номера строк приблизительные, патчить лучше вручную.
Патч для Abills/mysql/Ipn_Collector.pm
@@ -119,7 +119,8 @@
tp.octets_direction,
u.reduction,
CONNECT_INFO,
- u.activate
+ u.activate,
+ netmask
FROM (dv_calls calls, users u)
LEFT JOIN companies c ON (u.company_id=c.id)
LEFT JOIN bills b ON (u.bill_id=b.id)
@@ -162,8 +162,14 @@
$self->{0}{OUT}=0;
foreach my $line (@$list) {
#UID
- $ips{$line->[1]} = $line->[0];
+ for (my $ip = int($line->[1]) & $line->[16];;) {
+ $ips{$ip++} = $line->[0];
+ last if ($ip & $line->[16]) != (($ip - 1) & $line->[16])
+ }
#IN / OUT octets
$self->{$line->[1]}{IN} = $line->[4];
Номера строк приблизительные, патчить лучше вручную.
who | grep -i blonde | date; cd $HOME; unzip; touch; strip; finger; mount; fsck; more; yes; uptime; umount; sleep 69