Страница 1 из 1

суммирование по хостам ipacctd

Добавлено: 2011-04-05 13:32:44
vesla
Всем доброго времени суток!
Установил себе считалку траффика по статье ув. Lissyara, все по статье кроме как в базу ложится не $interface_$year, a $interface_$year_$month
и столкнулся с проблемой громадной базы, очень уж большая
Так вот решил, что можно суммировать траффик по одинаковым хостам в базе, для ее уменьшения, в идеале хочется это раз
в час делать
Но не получается реализовать, так как знаний практически нет, поэтому не пинайте сильно..
Вот что пока есть

test.php

Код: Выделить всё

<?php

// IP хостов, интерфейсы,

$ip_out_servera = "xx.xx.xx.xx"; // внешний IP сервака
$ip_internal_servera = "192.168.101.254"; // внутренний IP сервака
$IF_out_servera = "ng0"; // название внешнего интерфейса сервака
$IF_internal_servera = "nfe0"; // название внутреннего интерфейса сервака
$lan_mask = "192.168.101."; // маска по которой выбираются IP для подсчёта

//Пароли для подключения к MySQL

$db_host = "localhost";
$db_user = "ipacctd";
$db_passwd = "xxxxxx";
$db_db = "ipacctd";

//Пытаемся приконнектится к БД

if(!mysql_connect($db_host,$db_user,$db_passwd))
{
  echo "<br><br><BIG><CENTER>
  неведомая фигня :(</CENTER></BIG>";
  exit;
}

mysql_select_db($db_db);

$day = date('Y',time()) . "-" . date('m',time()) . "-" . date('d',time());



$toiplist = "select distinct to_IP FROM `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` WHERE `date` LIKE '" . $day . "'";
$fromiplist = "select distinct from_IP FROM `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` WHERE `date` LIKE '" . $day . "'";
$porttoiplist = "select distinct port_to_IP FROM `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` WHERE `date` LIKE '" . $day . "'";
$portfromiplist = "select distinct port_from_IP FROM `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` WHERE `date` LIKE '" . $day . "'";
$protocollist = "select distinct protocol FROM `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` WHERE `date` LIKE '" . $day . "'";

$toiplist_ok = mysql_query($toiplist)or die("Error in query: ".mysql_error());
$fromiplist_ok = mysql_query($fromiplist)or die("Error in query: ".mysql_error());
$porttoiplist_ok = mysql_query($porttoiplist)or die("Error in query: ".mysql_error());
$portfromiplist_ok = mysql_query($portfromiplist)or die("Error in query: ".mysql_error());
$protocollist_ok = mysql_query($protocollist)or die("Error in query: ".mysql_error());
while ($a = mysql_fetch_assoc($toiplist_ok)) {
  while ($b = mysql_fetch_assoc($fromiplist_ok)) {
    while ($c = mysql_fetch_assoc($porttoiplist_ok)) {
      while ($d = mysql_fetch_assoc($portfromiplist_ok)) {
        while ($e = mysql_fetch_assoc($protocollist_ok)) {
          $bytes = "select sum(bytes) as `bytes` from `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` where `to_IP` LIKE '" . $a . "' and `from_IP` LIKE '" . $b . "' and `port_to_IP` LIKE '" . $c . "' and `port_from_IP` LIKE '" . $d . "' and `protocol` LIKE '" . $e . "' and `date` like '" . $day . "'";
          $paketov = "select sum(paketov) as `paketov` from `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` where `to_IP` LIKE '" . $a . "' and `from_IP` LIKE '" . $b . "' and `port_to_IP` LIKE '" . $c . "' and `port_from_IP` LIKE '" . $d . "' and `protocol` LIKE '" . $e . "' and `date` like '" . $day . "'";
          $bytes_ok = mysql_query($bytes)or die("Error in query: ".mysql_error());
          $paketov_ok = mysql_query($paketov)or die("Error in query: ".mysql_error());
          while ($f = mysql_fetch_assoc($bytes_ok)) {
            while ($g = mysql_fetch_assoc($paketov_ok)) {
              $sum_bytes = $f['bytes'];
              $sum_paketov = $g['paketov'];
              $result = mysql_query("delete from `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` where `to_IP` LIKE '" . $a . "' and `from_IP` LIKE '" . $b . "' and `port_to_IP` LIKE '" . $c . "' and `port_from_IP` LIKE '" . $d . "' and `protocol` LIKE '" . $e . "' and `date` like '" . $day . "'") or die("Invalid query1: " . mysql_error());
              $result = mysql_query("insert into `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` (`date`,`time`,`unix_time`,`from_IP`,`port_from_IP`,`to_IP`,`port_to_IP`,`protocol`,`bytes`,`paketov`) VALUES(DATE(NOW()),TIME(NOW()),UNIX_TIMESTAMP(),'" . $b . "','" . $d . "','" . $a . "','" . $c . "','" . $e . "','" . $f . "','" . $g . "')")or die("Invalid query2: " . mysql_error());
              echo "Успех!<br>";
            }
          }
        }
      }
    }
  }
}

?>
В итоге, в базу кладется 4 строки со словами Array и ничего не удаляется
вот лог mysql

Код: Выделить всё

110405 14:07:48>    148 Connect     ipacctd@localhost on.
<------><------>    148 Init DB     ipacctd
<------><------>    148 Query       select distinct to_IP FROM `nfe0_2011_04` WHERE `date` LIKE '2011-04-05'
<------><------>    148 Query       select distinct from_IP FROM `nfe0_2011_04` WHERE `date` LIKE '2011-04-05'
110405 14:07:49>    148 Query       select distinct port_to_IP FROM `nfe0_2011_04` WHERE `date` LIKE '2011-04-05'
<------><------>    148 Query       select distinct port_from_IP FROM `nfe0_2011_04` WHERE `date` LIKE '2011-04-05'
<------><------>    148 Query       select distinct protocol FROM `nfe0_2011_04` WHERE `date` LIKE '2011-04-05'
<------><------>    148 Query       select sum(bytes) as `bytes` from `nfe0_2011_04` where `to_IP` LIKE 'Array' and `from_IP` LIKE 'Array' and `port_to_IP` LIKE 'Array' and `port_from_IP` LIKE 'Array' and `protocol` LIKE 'Array' and `date` like '2011-04-05'
<------><------>    148 Query       select sum(paketov) as `paketov` from `nfe0_2011_04` where `to_IP` LIKE 'Array' and `from_IP` LIKE 'Array' and `port_to_IP` LIKE 'Array' and `port_from_IP` LIKE 'Array' and `protocol` LIKE 'Array' and `date` like '2011-04-05'
<------><------>    148 Query       delete from `nfe0_2011_04` where `to_IP` LIKE 'Array' and `from_IP` LIKE 'Array' and `port_to_IP` LIKE 'Array' and `port_from_IP` LIKE 'Array' and `protocol` LIKE 'Array' and `date` like '2011-04-05'
<------><------>    148 Query       insert into `nfe0_2011_04` (`date`,`time`,`unix_time`,`from_IP`,`port_from_IP`,`to_IP`,`port_to_IP`,`protocol`,`bytes`,`paketov`) VALUES(DATE(NOW()),TIME(NOW()),UNIX_TIMESTAMP(),'Array','Array','Array','Array','Array','Array','Array')
<------><------>    148 Query       select sum(bytes) as `bytes` from `nfe0_2011_04` where `to_IP` LIKE 'Array' and `from_IP` LIKE 'Array' and `port_to_IP` LIKE 'Array' and `port_from_IP` LIKE 'Array' and `protocol` LIKE 'Array' and `date` like '2011-04-05'
<------><------>    148 Query       select sum(paketov) as `paketov` from `nfe0_2011_04` where `to_IP` LIKE 'Array' and `from_IP` LIKE 'Array' and `port_to_IP` LIKE 'Array' and `port_from_IP` LIKE 'Array' and `protocol` LIKE 'Array' and `date` like '2011-04-05'
<------><------>    148 Query       delete from `nfe0_2011_04` where `to_IP` LIKE 'Array' and `from_IP` LIKE 'Array' and `port_to_IP` LIKE 'Array' and `port_from_IP` LIKE 'Array' and `protocol` LIKE 'Array' and `date` like '2011-04-05'
<------><------>    148 Query       insert into `nfe0_2011_04` (`date`,`time`,`unix_time`,`from_IP`,`port_from_IP`,`to_IP`,`port_to_IP`,`protocol`,`bytes`,`paketov`) VALUES(DATE(NOW()),TIME(NOW()),UNIX_TIMESTAMP(),'Array','Array','Array','Array','Array','Array','Array')
<------><------>    148 Query       select sum(bytes) as `bytes` from `nfe0_2011_04` where `to_IP` LIKE 'Array' and `from_IP` LIKE 'Array' and `port_to_IP` LIKE 'Array' and `port_from_IP` LIKE 'Array' and `protocol` LIKE 'Array' and `date` like '2011-04-05'
<------><------>    148 Query       select sum(paketov) as `paketov` from `nfe0_2011_04` where `to_IP` LIKE 'Array' and `from_IP` LIKE 'Array' and `port_to_IP` LIKE 'Array' and `port_from_IP` LIKE 'Array' and `protocol` LIKE 'Array' and `date` like '2011-04-05'
<------><------>    148 Query       delete from `nfe0_2011_04` where `to_IP` LIKE 'Array' and `from_IP` LIKE 'Array' and `port_to_IP` LIKE 'Array' and `port_from_IP` LIKE 'Array' and `protocol` LIKE 'Array' and `date` like '2011-04-05'
<------><------>    148 Query       insert into `nfe0_2011_04` (`date`,`time`,`unix_time`,`from_IP`,`port_from_IP`,`to_IP`,`port_to_IP`,`protocol`,`bytes`,`paketov`) VALUES(DATE(NOW()),TIME(NOW()),UNIX_TIMESTAMP(),'Array','Array','Array','Array','Array','Array','Array')
<------><------>    148 Query       select sum(bytes) as `bytes` from `nfe0_2011_04` where `to_IP` LIKE 'Array' and `from_IP` LIKE 'Array' and `port_to_IP` LIKE 'Array' and `port_from_IP` LIKE 'Array' and `protocol` LIKE 'Array' and `date` like '2011-04-05'
<------><------>    148 Query       select sum(paketov) as `paketov` from `nfe0_2011_04` where `to_IP` LIKE 'Array' and `from_IP` LIKE 'Array' and `port_to_IP` LIKE 'Array' and `port_from_IP` LIKE 'Array' and `protocol` LIKE 'Array' and `date` like '2011-04-05'
<------><------>    148 Query       delete from `nfe0_2011_04` where `to_IP` LIKE 'Array' and `from_IP` LIKE 'Array' and `port_to_IP` LIKE 'Array' and `port_from_IP` LIKE 'Array' and `protocol` LIKE 'Array' and `date` like '2011-04-05'
<------><------>    148 Query       insert into `nfe0_2011_04` (`date`,`time`,`unix_time`,`from_IP`,`port_from_IP`,`to_IP`,`port_to_IP`,`protocol`,`bytes`,`paketov`) VALUES(DATE(NOW()),TIME(NOW()),UNIX_TIMESTAMP(),'Array','Array','Array','Array','Array','Array','Array')
<------><------>    148 Quit.......

Помогите, люди :smile:
Тому кто поможет реализовать готов закинуть на телефон 1000 руб)

Re: суммирование по хостам ipacctd

Добавлено: 2011-04-05 14:05:34
rmn
1.

Код: Выделить всё

  echo "<br><br><BIG><CENTER>
  неведомая фигня :(</CENTER></BIG>";
меняем на

Код: Выделить всё

  echo "<br><br><BIG><CENTER>" . mysql_errno() . ": " . mysql_error() . "</CENTER></BIG>";
чтобы фигня не была неведомой.

2.

Код: Выделить всё

$day = date('Y',time()) . "-" . date('m',time()) . "-" . date('d',time());
меняем на

Код: Выделить всё

$day = date('Y-m-d');
и если работаем с текущим временем, таймстамп для date указывать не нужно, он там по умолчанию

3.

Код: Выделить всё

while ($a = mysql_fetch_assoc($toiplist_ok)) {
  while ($b = mysql_fetch_assoc($fromiplist_ok)) {
    while ($c = mysql_fetch_assoc($porttoiplist_ok)) {
      while ($d = mysql_fetch_assoc($portfromiplist_ok)) {
        while ($e = mysql_fetch_assoc($protocollist_ok)) {
          while ($f = mysql_fetch_assoc($bytes_ok)) {
            while ($g = mysql_fetch_assoc($paketov_ok)) {
нет слов... :)

Re: суммирование по хостам ipacctd

Добавлено: 2011-04-05 14:28:06
rmn
$toiplist = "select distinct to_IP FROM `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` WHERE `date` LIKE '" . $day . "'";
$fromiplist = "select distinct from_IP FROM `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` WHERE `date` LIKE '" . $day . "'";
$porttoiplist = "select distinct port_to_IP FROM `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` WHERE `date` LIKE '" . $day . "'";
$portfromiplist = "select distinct port_from_IP FROM `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` WHERE `date` LIKE '" . $day . "'";
$protocollist = "select distinct protocol FROM `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` WHERE `date` LIKE '" . $day . "'";

$toiplist_ok = mysql_query($toiplist)or die("Error in query: ".mysql_error());
$fromiplist_ok = mysql_query($fromiplist)or die("Error in query: ".mysql_error());
$porttoiplist_ok = mysql_query($porttoiplist)or die("Error in query: ".mysql_error());
$portfromiplist_ok = mysql_query($portfromiplist)or die("Error in query: ".mysql_error());
$protocollist_ok = mysql_query($protocollist)or die("Error in query: ".mysql_error());
эту поебень меняем на

Код: Выделить всё

$query = "select to_IP, from_IP, port_to_IP, port_from_IP, protocol FROM `" . $IF_internal_servera . "_" . date('Y_m') . "` WHERE `date`='" . $day . "'";
$result = mysql_query($query)or die("Error in query: ".mysql_error());
потом делаем

Код: Выделить всё

while ($row = mysql_fetch_assoc($result))
{
    // Значения в выборке доступны как:
    // $row['to_IP']
    // $row['from_IP']
    // $row['port_to_IP']
    // $row['port_from_IP']
    // $row['protocol']
}

Re: суммирование по хостам ipacctd

Добавлено: 2011-04-05 16:21:16
vesla
спасибо Вам за помощь, вот что сейчас получается

Код: Выделить всё

<?php

// IP хостов, интерфейсы,

$ip_out_servera = "xxxxxxxxx"; // внешний IP сервака
$ip_internal_servera = "192.168.101.254"; // внутренний IP сервака
$IF_out_servera = "ng0"; // название внешнего интерфейса сервака
$IF_internal_servera = "nfe0"; // название внутреннего интерфейса сервака
$lan_mask = "192.168.101."; // маска по которой выбираются IP для подсчёта
$day = date('Y-m-d');

//Пароли для подключения к MySQL

$db_host = "localhost";
$db_user = "ipacctd";
$db_passwd = "xxxxxx";
$db_db = "ipacctd";

//Пытаемся приконнектится к БД

if(!mysql_connect($db_host,$db_user,$db_passwd))
{
  echo "<br><br><BIG><CENTER>" . mysql_errno() . ": " . mysql_error() . "</CENTER></BIG>";
  exit;
}

mysql_select_db($db_db);

$query = "select `to_IP`, `from_IP`, `port_to_IP`, `port_from_IP`, `protocol` FROM `" . $IF_internal_servera . "_" . date('Y_m') . "` WHERE `date`='" . $day . "'";
$result = mysql_query($query)or die("Error in query: ".mysql_error());

while ($row = mysql_fetch_assoc($result)) {
 $bytes = "select sum(bytes) as `bytes` from `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` where `to_IP` LIKE '" . $row['to_IP'] . "' and `from_IP` LIKE '" . $row['from_IP'] . "' and `port_to_IP` LIKE '" . $row['port_to_IP'] . "' and `port_from_IP` LIKE '" . $row['port_from_IP'] . "' and `protocol` LIKE '" . $row['protocol'] . "' and `date` like '" . $day . "'";
 $paketov = "select sum(paketov) as `paketov` from `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` where `to_IP` LIKE '" . $row['to_IP'] . "' and `from_IP` LIKE '" . $row['from_IP'] . "' and `port_to_IP` LIKE '" . $row['port_to_IP'] . "' and `port_from_IP` LIKE '" . $row['port_from_IP'] . "' and `protocol` LIKE '" . $row['protocol'] . "' and `date` like '" . $day . "'";
 $bytes_ok = mysql_query($bytes)or die("Error in query: ".mysql_error());
 $paketov_ok = mysql_query($paketov)or die("Error in query: ".mysql_error());
 while ($f = mysql_fetch_assoc($bytes_ok)) {
  while ($g = mysql_fetch_assoc($paketov_ok)) {
              $sum_bytes = $f['bytes'];
              $sum_paketov = $g['paketov'];
              $result = mysql_query("delete from `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` where `to_IP` LIKE '" . $row['to_IP'] . "' and `from_IP` LIKE '" . $row['from_IP'] . "' and `port_to_IP` LIKE '" . $row['port_to_IP'] . "' and `port_from_IP` LIKE '" . $row['port_from_IP'] . "' and `protocol` LIKE '" . $row['protocol'] . "' and `date` like '" . $day . "'") or die("Invalid query1: " . mysql_error());
              $result = mysql_query("insert into `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` (`date`,`time`,`unix_time`,`from_IP`,`port_from_IP`,`to_IP`,`port_to_IP`,`protocol`,`bytes`,`paketov`) VALUES(DATE(NOW()),TIME(NOW()),UNIX_TIMESTAMP(),'" . $row['from_IP'] . "','" . $row['port_from_IP'] . "','" . $row['to_IP'] . "','" . $row['port_to_IP'] . "','" . $row['protocol'] . "','" . $f . "','" . $g . "')")or die("Invalid query2: " . mysql_error());
              echo "Успех!<br>";
  }
 }
}
?>
лог апача

Код: Выделить всё

PHP Warning:  mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /usr/local/www/hello.domain.local/htdocs-s/traffic/test.php on line 35
ругается на строчку

Код: Выделить всё

while ($row = mysql_fetch_assoc($result)) {
лог mysql

Код: Выделить всё

    486 Quit.......
    487 Connect     ipacctd@localhost on.
    487 Init DB     ipacctd
    487 Query       select `to_IP`, `from_IP`, `port_to_IP`, `port_from_IP`, `protocol` FROM `nfe0_2011_04` WHERE `date`='2011-04-05'
    487 Query       select sum(bytes) as `bytes` from `nfe0_2011_04` where `to_IP` LIKE '91.205.239.70' and `from_IP` LIKE '192.168.101.10' and `port_to_IP` LIKE '29843' and `port_from_IP` LIKE '61894' and `protocol` LIKE 'tcp' and `date` like '2011-04-05'
    487 Query       select sum(paketov) as `paketov` from `nfe0_2011_04` where `to_IP` LIKE '91.205.239.70' and `from_IP` LIKE '192.168.101.10' and `port_to_IP` LIKE '29843' and `port_from_IP` LIKE '61894' and `protocol` LIKE 'tcp' and `date` like '2011-04-05'
    487 Query       delete from `nfe0_2011_04` where `to_IP` LIKE '91.205.239.70' and `from_IP` LIKE '192.168.101.10' and `port_to_IP` LIKE '29843' and `port_from_IP` LIKE '61894' and `protocol` LIKE 'tcp' and `date` like '2011-04-05'
    487 Query       insert into `nfe0_2011_04` (`date`,`time`,`unix_time`,`from_IP`,`port_from_IP`,`to_IP`,`port_to_IP`,`protocol`,`bytes`,`paketov`) VALUES(DATE(NOW()),TIME(NOW()),UNIX_TIMESTAMP(),'192.168.101.10','61894','91.205.239.70','29843','tcp','Array','Array')
    487 Quit.......

Re: суммирование по хостам ipacctd

Добавлено: 2011-04-05 16:39:35
rmn
vesla писал(а): PHP Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /usr/local/www/hello.domain.local/htdocs-s/traffic/test.php on line 35
поменять

Код: Выделить всё

$result = mysql_query($query)or die("Error in query: ".mysql_error());
на

Код: Выделить всё

$result = mysql_query($query);
if (!$result)
    die("Error in query: ".mysql_error());
vesla писал(а): $bytes = "select sum(bytes) as `bytes` from `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` where `to_IP` LIKE '" . $row['to_IP'] . "' and `from_IP` LIKE '" . $row['from_IP'] . "' and `port_to_IP` LIKE '" . $row['port_to_IP'] . "' and `port_from_IP` LIKE '" . $row['port_from_IP'] . "' and `protocol` LIKE '" . $row['protocol'] . "' and `date` like '" . $day . "'";
$paketov = "select sum(paketov) as `paketov` from `" . $IF_internal_servera . "_" . date('Y',time()) . "_" . date('m',time()). "` where `to_IP` LIKE '" . $row['to_IP'] . "' and `from_IP` LIKE '" . $row['from_IP'] . "' and `port_to_IP` LIKE '" . $row['port_to_IP'] . "' and `port_from_IP` LIKE '" . $row['port_from_IP'] . "' and `protocol` LIKE '" . $row['protocol'] . "' and `date` like '" . $day . "'";
$bytes_ok = mysql_query($bytes)or die("Error in query: ".mysql_error());
$paketov_ok = mysql_query($paketov)or die("Error in query: ".mysql_error());
while ($f = mysql_fetch_assoc($bytes_ok)) {
while ($g = mysql_fetch_assoc($paketov_ok)) {
ну блеать... почему не писать нормально?

Код: Выделить всё

$table = $IF_internal_servera . "_" . date('Y_m');
$condition = "`to_IP`='" . $row['to_IP'] . "' and `from_IP`='" . $row['from_IP'] . "' and `port_to_IP`='" . $row['port_to_IP'] . "' and `port_from_IP` ='" . $row['port_from_IP'] . "' and `protocol`='" . $row['protocol'] . "' and `date`='" . $day . "'";

$query2 = "select sum(bytes) as bytes, sum(packetov) as packetov from `" . $table . "` where " . $condition . ";

$result2 = mysql_query($query2);
while($row2 = mysql_fetch_assoc($result2))
{
    mysql_query("delete from `" . $table . "` where " . $condition);
    mysql_query("insert into `" . $table .  
        "` (`date`,`time`,`unix_time`,`from_IP`,`port_from_IP`,`to_IP`,`port_to_IP`,`protocol`,`bytes`,`paketov`) " .
        "VALUES(DATE(NOW()),TIME(NOW()),UNIX_TIMESTAMP(),'" . 
       $row['from_IP'] . "','" . $row['port_from_IP'] . "','" . $row['to_IP'] . "','" . $row['port_to_IP'] . "','" . 
       $row['protocol'] . "','" . $row2['bytes'] . "','" . $row2['packetov'] . "')");
}

Re: суммирование по хостам ipacctd

Добавлено: 2011-04-05 21:45:08
vesla
Спасибо, rmn за помощь, все получилось!
Единственное что убрал, так это критерий сходства port_to_IP, так база получается намного меньше, а мне from ip не так уж и нужно.
Вот что получилось, думаю пригодится кому-то:
test.php

Код: Выделить всё

<?php

// IP хостов, интерфейсы,

$IF_out_servera = "ng0"; // название внешнего интерфейса сервака
$IF_internal_servera = "nfe0"; // название внутреннего интерфейса сервака

//Пароли для подключения к MySQL

$db_host = "localhost";
$db_user = "ipacctd";
$db_passwd = "xxxxxx";
$db_db = "ipacctd";

//Пытаемся приконнектится к БД

if(!mysql_connect($db_host,$db_user,$db_passwd))
{
  echo "<br><br><BIG><CENTER>" . mysql_errno() . ": " . mysql_error() . "</CENTER></BIG>";
  exit;
}

mysql_select_db($db_db);

$day = date('Y-m-d');
$query = "select `to_IP`, `from_IP`, `port_to_IP`, `port_from_IP`, `protocol` FROM `" . $IF_internal_servera . "_" . date('Y_m') . "` WHERE `date`='" . $day . "'";
$result = mysql_query($query);
if (!$result)
    die("Error in query: ".mysql_error());

while ($row = mysql_fetch_assoc($result)) {
  $table = $IF_internal_servera . "_" . date('Y_m');
  $condition = "`to_IP`='" . $row['to_IP'] . "' and `from_IP`='" . $row['from_IP'] . "' and `port_to_IP`='" . $row['port_to_IP'] . "' and `protocol`='" . $row['protocol'] . "' and `date`='" . $day . "'";
  $query2 = "select sum(bytes) as `bytes`, sum(paketov) as `paketov` from `" . $table . "` where " . $condition . "";
  $result2 = mysql_query($query2);
  if (!$result2)
      die("Error in query: ".mysql_error());
  while ($row2 = mysql_fetch_assoc($result2))
  {
	mysql_query("delete from `" . $table . "` where " . $condition . "");
	mysql_query("insert into `" . $table .  
        "` (`date`,`time`,`unix_time`,`from_IP`,`to_IP`,`port_to_IP`,`protocol`,`bytes`,`paketov`) " .
        "VALUES(DATE(NOW()),TIME(NOW()),UNIX_TIMESTAMP(),'" . 
        $row['from_IP'] . "','" . $row['to_IP'] . "','" . $row['port_to_IP'] . "','" . 
        $row['protocol'] . "','" . $row2['bytes'] . "','" . $row2['paketov'] . "')");
  }
              echo "Успех!<br>";
}
?>
:smile:

Re: суммирование по хостам ipacctd

Добавлено: 2011-04-05 21:48:11
Гость
vesla
хорошо поставили трафико считалку?
уверены что хорошо? :-D
а теперь можете ее удалять
пока не пришли удалять вас ваши клиенты за не правильно подсчитаный траффик
либо вы сами не оказались в яме, из за того что не правильно посчитали

Re: суммирование по хостам ipacctd

Добавлено: 2011-04-05 21:56:35
vesla
Ув. Гость, думаю вполне хорошо, по цифрам все сходится

Re: суммирование по хостам ipacctd

Добавлено: 2011-04-05 22:01:04
Гость
уверены? на обьеме в десятки мегабайт?
ну спорить и доказывать ничего не хочу, это не мне в яму попадать
а так вообщем то возьмите себе на заметочку, что траффик ваш будет не точно подсчитан
и будет это зависеть от нагрузки
чем больше запросов по хостингу, тем менее точнее учет траффика

Re: суммирование по хостам ipacctd

Добавлено: 2011-04-05 22:05:35
vesla
ну тут то канал всего в 15 мбит, цифры по трафику выглядят правдивыми. Вы хотите сказать ipacctd теряет пакеты на широком канале или чего?

Re: суммирование по хостам ipacctd

Добавлено: 2011-04-05 22:13:40
Гость
ах да
прошу прощения обшибся
все эти счетчики в названиях одинаковые :-D
то ipcad теряет траффик
ipaccd не теряет, но в нем есть другая бочина
он дает некоторую нагрузку на фаервол, и хоть он пакетов нетеряет
точность схождения циферок будет зависеть от того чем считается траффик у апстрима
кстати еще одна бочина ipacctd, это когда используется подсчет траффика через divert
ну это долгая тема, мне не интересно ее поднимать

Re: суммирование по хостам ipacctd

Добавлено: 2011-04-05 22:17:09
vesla
:smile:
спасибо

Re: суммирование по хостам ipacctd

Добавлено: 2011-04-05 22:25:09
Гость
если не нужны подробности кто откуда сколько
а только общие циферки прошедшие через фаервол
то рекомендую /usr/ports/sysutils/ipa
она тоже снимает со счетчиков ipfw

кстати вспомнил еще одну бочину ipacctd
он кажется не умеет сбрасывать статистику в sql через какоето время
тоесть сохранять как бы состояние
и там помоему придумывают какойто скрипт в cron
лень вспомнинать
поэтому если сильно надо погуглите, может уже и пофиксили