URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 57281
[ Назад ]

Исходное сообщение
"ng_ipacct + perl + mysql"

Отправлено darkmatter , 10-Июн-05 11:55 
делаю учет трафика по статьям
http://citrin.ru/my/ng_ipacct.html http://www.bsdportal.ru/kb.php?mode=article&k=53

есть таблица в mysql

CREATE TABLE inet (

id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
src_ip CHAR(15) NOT NULL,
src_port SMALLINT NOT NULL,
dst_ip CHAR(16) NOT NULL,
dst_port SMALLINT NOT NULL,
proto CHAR(4) NOT NULL,
size INT NOT NULL,
packets INT NOT NULL,
fdd TINYINT NOT NULL,
fdm TINYINT NOT NULL,
fdy SMALLINT NOT NULL,
ftime TIME NOT NULL,
PRIMARY KEY (id, src_ip, dst_ip)
);


и есть данный скрипт на perl:

#!/usr/bin/perl

use IO::File;
use Time::localtime;
use DBI;

$du = "root";
$dp = "pass";
$dn = "ipacctd";
$dh = "localhost";
$file = "/var/log/ipacct/2005-06-08/2005-06-08-16-xl1";


$dbh = DBI->connect("dbi:mysql:$dn:$dh",$du,$dp);
if($DBI::err) {print($DBI::errstr);exit;}

$add = $dbh->prepare("INSERT INTO inet VALUES (?,?,?,?,?,?,?,?,?,?,?,?);");

open(IN, "cat $file |");

while()
{
chomp();
( $src_ip, $src_port, $dst_ip, $dst_port, $proto, $packets, $size, $localtime ) = split/s+/;

$date2 = localtime($localtime);
$day = $date2->mday;
$month = $date2->mon+1;
$year = $date2->year+1900;
$hour = $date2->hour;
$min = $date2->min;
$sec = $date2->sec;
$time = "$hour:$min:$sec";

$add->execute( NULL, $src_ip, $src_port, $dst_ip, $dst_port, $proto, $packets, $size, $day, $month, $year, $time );

}
$dbh->disconnect();

exit;


так вот, логи пишутся замечательно. А этот скрипт не хочет в mysql засовывать данные ругается:
DBD::mysql::st execute failed: Column 'src_ip' cannot be null at ipacct.pl line 35.


подскажите плиз в чем проблема, или покажите рабочий пример такого скрипта.


уже второй день бьюсь :(((



Содержание

Сообщения в этом обсуждении
"ng_ipacct + perl + mysql"
Отправлено Skif , 10-Июн-05 12:19 
Я  для "системного алминистратора" недавно писал статью по биллингу в связке ng_ipacct + mysql + perl
Если интересно - сходи туда (http://samag.ru). Может в течении одного - двух дней выложу у себя на сервере и дам линк (на выходных) если это актуально. Там полный разбор скриптов и сами скрипты.

"ng_ipacct + perl + mysql"
Отправлено Skif , 10-Июн-05 12:32 
>Я  для "системного алминистратора" недавно писал статью по биллингу в связке
>ng_ipacct + mysql + perl
>Если интересно - сходи туда (http://samag.ru). Может в течении одного - двух
>дней выложу у себя на сервере и дам линк (на выходных)
>если это актуально. Там полный разбор скриптов и сами скрипты.

упс, еще полмесяца потерпеть надоть :)
вот тут готовые скрипты. :)
http://www.samag.ru/source/f0205-1.zip


"ng_ipacct + perl + mysql"
Отправлено Skif , 10-Июн-05 12:37 
>так вот, логи пишутся замечательно. А этот скрипт не хочет в mysql
>засовывать данные ругается:
>DBD::mysql::st execute failed: Column 'src_ip' cannot be null at ipacct.pl line 35.
>

Проблема в том, что у тебя src_ip имеет значение 0 или undef, а в таблице для этого columns стоит NOT NULL.


"ng_ipacct + perl + mysql"
Отправлено darkmatter , 10-Июн-05 13:42 
>>так вот, логи пишутся замечательно. А этот скрипт не хочет в mysql
>>засовывать данные ругается:
>>DBD::mysql::st execute failed: Column 'src_ip' cannot be null at ipacct.pl line 35.
>>
>
>Проблема в том, что у тебя src_ip имеет значение 0 или undef,
>а в таблице для этого columns стоит NOT NULL.


пустых значений src_ip в логах нету.
А эти скрипты я нашел на samag, разгребаю сейчас :) хотелось бы описания...


"ng_ipacct + perl + mysql"
Отправлено Skif , 10-Июн-05 13:51 
Я бы с радостью. :) Но договор - 2 месяцапосле публикации не публиковать статью где либо.

В двух словах

создай папку
/usr/local/script/ng_stat/

В ней подпапки
root@merlin /home/skif :lf /usr/local/script/ng_stat/
bin/ etc/ log/

В log ложаться логи от интефейсов, etc - конфиг , bin - исполняемые файлы(скрипты)

вот мой конфиг (с комментариеями и т.д. в се как в оригинале)
skif@server /usr/local/script/ng_stat/:less etc/ng_stat.conf
# Имя сервера, где находиться база данных статистики
server_db = freebsd
# Имя базы данных, где будет сохраняться статистика
db_name = ng_stat
# Имя пользователи для доступа к базе
db_user = nguser
# Пароль для доступа к базе
db_pass = ng_pass
# Таблица для авторизации пользователей. Для web/win32-доступа
table_auth = ipacct_auth
# Таблица со списком протоколов, эквивалент /etc/protocols
table_protocols = prortocols
# Имя хоста с которого снимается статистика
listen_host = freebsd3
# Имена интерфейсов, которые прослушиваются на компьютере.
# Указывать через запятую
listen_interfaces = fxp0
# Загружаемые модули NETGRAPH, необходимые для интерфейсов,
# которые будет обслуживать программа
# По умолчанию загружаются следующие модули: netgraph,
# ng_ether,ng_socket,ng_tee,ng_ipacct
ng_modules = netgraph,ng_ether,ng_socket,ng_tee,ng_ipacct
# Какой трешхолд необходимо установить для работы системы.
# Отнеситесь внимательно к выбору этого параметра. Он
# означает сколько записей будет храниться в буфере
# По умолчанию значение равно 5000, но если у вас меньше
# 128 Мегабайт памяти  - уменьште его.
threshold = 7000

скрипты ложишь в  bin
ng_stat_start.pl - старт ng_ipacct
ng_stat_stop.pl - останов ng_ipacct
ng_stat_in.pl - внесение логов в таблицу. Если таблица отсутствует - создается новая таблица.

Более подробно - в журнале :)


"ng_ipacct + perl + mysql"
Отправлено darkmatter , 10-Июн-05 14:02 
>Я бы с радостью. :) Но договор - 2 месяцапосле публикации не
>публиковать статью где либо.
>
большое спасибо! буду разбираться :) а журнал не знаю где найти, статья ведь в двух частях, а февральский номер не знаю где купить, везде только новые :(

"ng_ipacct + perl + mysql"
Отправлено kirbaco , 20-Июл-05 17:51 
Сразу скажу - спасибо за статью! Сейчас пробую по ней настроить статистику.
Я немного подредактировал стартовый скрипрт:
----------------------------------------------------
> diff ng_stat_start.pl orig/ng_stat_start.pl
23c23
< open (CONFIG, "/usr/local/ng_stat/etc/ng_stat.conf");
---
> open (CONFIG, "/usr/local/script/ng_stat/etc/ng_stat.conf");
190c190
< sub listening{
---
> sublistening{
201c201
<               if ($pid == 0){
---
>               ($pid == 0){
251c251
<                 if ($pid == 0){
---
>                 ($pid == 0){
276c276
<                 if ($pid == 0){
---
>                 ($pid == 0){
301c301
<                 if ($pid == 0){
---
>                 ($pid == 0){
351c351
<                 if ($pid == 0){
---
>                 ($pid == 0){
----------------------------------------------------
и при старте он, вроде, выдает правильную диагностику, но смущает одна (первая) строка:
Use of uninitialized value in concatenation (.) or string at ./ng_stat_start.pl line 123.
Не подскажете ли что имеется ввиду?
Спасибо.

"ng_ipacct + perl + mysql"
Отправлено kirbaco , 27-Июл-05 13:29 
Вроде все работает. А как автор смотрит не развитие темы? В смысле показать свой веб интерфейс.