Биллинговая система Nodeny
25 Ноября 2024, 16:19:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: 1 ... 36 37 [38] 39 40 ... 88
  Печать  
Автор Тема: После установки Nodeny+ есть пару вопросов.  (Прочитано 366970 раз)
Pa4ka
Старожил
****

Карма: 4
Offline Offline

Сообщений: 281

591884591
Просмотр профиля Email
« Ответ #555 : 27 Марта 2014, 18:14:14 »

Где-то уже была теме про authtraf - perl-модуль, который использует этот модуль, глючный. Как будет время заменю его на вызов arping
а много нужно переписать что бы работало?
Записан
maxx
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 34


Просмотр профиля Email
« Ответ #556 : 28 Марта 2014, 12:39:54 »

Возник вопрос. Как выдавать айпи из определенного пула определенным клиентам. Например есть есть группа пользователей с серыми адресами и с динамическими реальными. Как указать что адрес нужно брать из пула?
и вопрос намбер цвай, как купить модуль? Не могу зачислить денег на счет.
Спс.
Записан
Redmen
NoDeny
Ветеран
*

Карма: 62
Offline Offline

Сообщений: 546


Подяку в КАРМУ


Просмотр профиля WWW
« Ответ #557 : 28 Марта 2014, 12:59:10 »

Где-то уже была теме про authtraf - perl-модуль, который использует этот модуль, глючный. Как будет время заменю его на вызов arping
а много нужно переписать что бы работало?
я вчера хотел переделать даный модуль на перловский Net::Arping, но проблема остановила меня в самом начале, т.к. Net::Arping несмог поставить на фрю!!
есть 2 выхода из ситуации:
1) переделать  authtraf на вызов системной команды Arping;
2) отказаться от authtraf, а взамен переделать модуль коллектора так, чтобы при снятии среза,
если есть у клиента трафик и авторизация "всегда онлайн" вызывать ("CALL set_auth(?,?)", $p{ipa}, $opts);


Записан

Приймаю подяку у вигляді карми... та/або грошей Подмигивающий
t.me/MrMethod
Pa4ka
Старожил
****

Карма: 4
Offline Offline

Сообщений: 281

591884591
Просмотр профиля Email
« Ответ #558 : 29 Марта 2014, 12:55:05 »

Где-то уже была теме про authtraf - perl-модуль, который использует этот модуль, глючный. Как будет время заменю его на вызов arping
а много нужно переписать что бы работало?
я вчера хотел переделать даный модуль на перловский Net::Arping, но проблема остановила меня в самом начале, т.к. Net::Arping несмог поставить на фрю!!
есть 2 выхода из ситуации:
1) переделать  authtraf на вызов системной команды Arping;
2) отказаться от authtraf, а взамен переделать модуль коллектора так, чтобы при снятии среза,
если есть у клиента трафик и авторизация "всегда онлайн" вызывать ("CALL set_auth(?,?)", $p{ipa}, $opts);



а почему не смогли поставить? странно...
меня только первый вариант устраивает, так как если у абонента "всегда онлайн" но доступ запрещен то вообще почти никакой трафик не идёт кроме заглушки, а он не считаеться...
а через пинг и арпинг все работающие в сети хосты были видны, есть ли к ним хоть какая то связь ил нет
Записан
ser970
NoDeny
Спец
*

Карма: 70
Offline Offline

Сообщений: 1323

262462619
Просмотр профиля Email
« Ответ #559 : 30 Марта 2014, 13:59:49 »

я вчера хотел переделать даный модуль на перловский Net::Arping, но проблема остановила меня в самом начале, т.к. Net::Arping несмог поставить на фрю!!
есть 2 выхода из ситуации:
1) переделать  authtraf на вызов системной команды Arping;

а если пойти дальше и вообще отказаться от Arping - в данном случае это просто арп таблица.

ну где-то так

Код:
sub main
{
    my($task, $single, $config) = @_;
    my $interface = $config->{interface};
    my %p = Db->line("SELECT DATE_FORMAT(NOW(), 'X%Y_%c_%e') AS x_tbl_name");
    &arp;
    %p or return;
    my $ntraf_sql = "SELECT INET_NTOA(i.ip) AS ipa, ".
        "(SELECT 1 FROM $p{x_tbl_name} WHERE uid = u.id AND `in` >0 AND `out` >0 AND time>(UNIX_TIMESTAMP()-60) LIMIT 1) AS has_traf ".
        " FROM users u JOIN ip_pool i ON i.uid = u.id WHERE u.lstate = 1";
    my $db = Db->sql( $ntraf_sql );
    while( my %p = $db->line )
    {
        $mac=$macTable{$p{ip}};
        debug("arp_lookup $p{ipa}: $mac");
        my $opts = "mod=authtraf";
        if( length $mac == 12 )
        {
            $opts .= ";user=$mac;";
        }
         elsif( !$p{has_traf} )
        {
            next;
        }
        Db->do("CALL set_auth(?,?)", $p{ipa}, $opts);
    }
}



sub arp {
    use strict;
    use Net::SNMP qw(snmp_dispatcher oid_lex_sort);
    my ($ip,$key,$mac,%macTable,$oid,$host,$community,$result,$session,$error);
    $oid = '.1.3.6.1.2.1.3.1.1.2';
    $host='127.0.0.1';
    $community='ser';
    ($session, $error) = Net::SNMP->session(-hostname  => $host,-community => $community,-port => 161);
    if (!defined($session))
        {
            debug("error snmp");
            exit 1;
        }
    if (defined($result = $session->get_table(-baseoid => $oid)))
        {
            foreach (oid_lex_sort(keys(%{$result})))
                {
                    $ip = $_;
                    $ip =~ s/$oid.//;
                    $ip = substr($ip,4);
                    $mac = substr($result->{$_},2);
                    $macTable{$ip} = $mac;
                }
        }
}

з.ы. В работе не тестировалось , да и лишние переменные надо бы убрать....
Записан
Pa4ka
Старожил
****

Карма: 4
Offline Offline

Сообщений: 281

591884591
Просмотр профиля Email
« Ответ #560 : 31 Марта 2014, 12:52:14 »

я вчера хотел переделать даный модуль на перловский Net::Arping, но проблема остановила меня в самом начале, т.к. Net::Arping несмог поставить на фрю!!
есть 2 выхода из ситуации:
1) переделать  authtraf на вызов системной команды Arping;

а если пойти дальше и вообще отказаться от Arping - в данном случае это просто арп таблица.

ну где-то так

Код:
sub main
{
    my($task, $single, $config) = @_;
    my $interface = $config->{interface};
    my %p = Db->line("SELECT DATE_FORMAT(NOW(), 'X%Y_%c_%e') AS x_tbl_name");
    &arp;
    %p or return;
    my $ntraf_sql = "SELECT INET_NTOA(i.ip) AS ipa, ".
        "(SELECT 1 FROM $p{x_tbl_name} WHERE uid = u.id AND `in` >0 AND `out` >0 AND time>(UNIX_TIMESTAMP()-60) LIMIT 1) AS has_traf ".
        " FROM users u JOIN ip_pool i ON i.uid = u.id WHERE u.lstate = 1";
    my $db = Db->sql( $ntraf_sql );
    while( my %p = $db->line )
    {
        $mac=$macTable{$p{ip}};
        debug("arp_lookup $p{ipa}: $mac");
        my $opts = "mod=authtraf";
        if( length $mac == 12 )
        {
            $opts .= ";user=$mac;";
        }
         elsif( !$p{has_traf} )
        {
            next;
        }
        Db->do("CALL set_auth(?,?)", $p{ipa}, $opts);
    }
}



sub arp {
    use strict;
    use Net::SNMP qw(snmp_dispatcher oid_lex_sort);
    my ($ip,$key,$mac,%macTable,$oid,$host,$community,$result,$session,$error);
    $oid = '.1.3.6.1.2.1.3.1.1.2';
    $host='127.0.0.1';
    $community='ser';
    ($session, $error) = Net::SNMP->session(-hostname  => $host,-community => $community,-port => 161);
    if (!defined($session))
        {
            debug("error snmp");
            exit 1;
        }
    if (defined($result = $session->get_table(-baseoid => $oid)))
        {
            foreach (oid_lex_sort(keys(%{$result})))
                {
                    $ip = $_;
                    $ip =~ s/$oid.//;
                    $ip = substr($ip,4);
                    $mac = substr($result->{$_},2);
                    $macTable{$ip} = $mac;
                }
        }
}

з.ы. В работе не тестировалось , да и лишние переменные надо бы убрать....

ну немножно не верно(
у меня к примеру в арп таблице связка мак и ИП считаеться действительной 1200 секунд, значит и хост будет считаться 20 минут авторизированым, хотя это не так
Код:
? (172.20.5.162) at b8:a3:86:0c:5c:03 on bce1 expires in 1192 seconds
Записан
ser970
NoDeny
Спец
*

Карма: 70
Offline Offline

Сообщений: 1323

262462619
Просмотр профиля Email
« Ответ #561 : 31 Марта 2014, 12:57:06 »

ну немножно не верно(
у меня к примеру в арп таблице связка мак и ИП считаеться действительной 1200 секунд, значит и хост будет считаться 20 минут авторизированым, хотя это не так
Код:
? (172.20.5.162) at b8:a3:86:0c:5c:03 on bce1 expires in 1192 seconds

arp_lookup()
  $mac = Net::ARP::arp_lookup($dev,"192.168.1.1");

  This looks up the MAC address for the ip address 192.168.1.1
  and stores it in the variable $mac. The return value is
  "unknown" if the mac cannot be looked up.

то есть аналогично arp -a
 
Записан
ser970
NoDeny
Спец
*

Карма: 70
Offline Offline

Сообщений: 1323

262462619
Просмотр профиля Email
« Ответ #562 : 31 Марта 2014, 22:07:01 »

если пинговать arping

то можно так где-то


use strict;
use threads;
use threads::shared;
use Net::Netmask;
no warnings 'threads';


Код:

sub main {
    my $net = '13.13.10.0/24'; #подсеть хотя ее можно считать из конфига....
    my $interface = $config->{interface};
    my $block = Net::Netmask->new($net);
    my @devices;
    my $size=$block->size();
    for (my $i=0; $i<=$size; $i++)
        {
             push (@devices, $block->nth($i));
        }
    $SIG{CHLD} = 'IGNORE';
    my @trl;
    my $threads :shared = 0;
    my $threads_all :shared = 256;
    foreach (@devices)
        {
            sleep 1 while ($threads>$threads_all);
            if ($threads<=$threads_all)
                {
                    $trl[$_]=threads->create(\&trp,$_);
                    $trl[$_]->detach();
                }
        }
    1 while (scalar(threads->list(threads::running))>0);
    threads->exit();
    sub trp
        {
            $threads++;
            my $host = shift;
            my $sleeptime = int(rand()*5);
            sleep($sleeptime);
            my @res=`/usr/local/sbin/arping -p -uv -c 1  -i $interface $host`;
            my $res=$res[3];
            $res =~ s/\n//g;
            $res =~ s/\://g;
            my @ma=split/\s+/,$res;
            my $opts="mod=authtraf";
            if ($ma[3])
                {
                    $opts .= ";user=$ma[3];";
                    Db->do("CALL set_auth(?,?)", $host, $opts);
                }
            $threads--;
        }
}

тут смысл запускается многопоточно на всю подсеть ...

но прикол в том что у меня на freebsd 10  arping  не работает нормально....
Записан
Pa4ka
Старожил
****

Карма: 4
Offline Offline

Сообщений: 281

591884591
Просмотр профиля Email
« Ответ #563 : 01 Апреля 2014, 10:01:52 »

если пинговать arping

то можно так где-то


use strict;
use threads;
use threads::shared;
use Net::Netmask;
no warnings 'threads';


Код:

sub main {
    my $net = '13.13.10.0/24'; #подсеть хотя ее можно считать из конфига....
    my $interface = $config->{interface};
    my $block = Net::Netmask->new($net);
    my @devices;
    my $size=$block->size();
    for (my $i=0; $i<=$size; $i++)
        {
             push (@devices, $block->nth($i));
        }
    $SIG{CHLD} = 'IGNORE';
    my @trl;
    my $threads :shared = 0;
    my $threads_all :shared = 256;
    foreach (@devices)
        {
            sleep 1 while ($threads>$threads_all);
            if ($threads<=$threads_all)
                {
                    $trl[$_]=threads->create(\&trp,$_);
                    $trl[$_]->detach();
                }
        }
    1 while (scalar(threads->list(threads::running))>0);
    threads->exit();
    sub trp
        {
            $threads++;
            my $host = shift;
            my $sleeptime = int(rand()*5);
            sleep($sleeptime);
            my @res=`/usr/local/sbin/arping -p -uv -c 1  -i $interface $host`;
            my $res=$res[3];
            $res =~ s/\n//g;
            $res =~ s/\://g;
            my @ma=split/\s+/,$res;
            my $opts="mod=authtraf";
            if ($ma[3])
                {
                    $opts .= ";user=$ma[3];";
                    Db->do("CALL set_auth(?,?)", $host, $opts);
                }
            $threads--;
        }
}

тут смысл запускается многопоточно на всю подсеть ...

но прикол в том что у меня на freebsd 10  arping  не работает нормально....
и у меня на 10-ке не работает как следует, то timeout пишет то ваще ничего
Записан
ser970
NoDeny
Спец
*

Карма: 70
Offline Offline

Сообщений: 1323

262462619
Просмотр профиля Email
« Ответ #564 : 01 Апреля 2014, 10:34:26 »

и у меня на 10-ке не работает как следует, то timeout пишет то ваще ничего
аналогично - поэтому скрипт проверялся на 8.2 но проверялся отдельно от билинга....
Записан
Pa4ka
Старожил
****

Карма: 4
Offline Offline

Сообщений: 281

591884591
Просмотр профиля Email
« Ответ #565 : 03 Апреля 2014, 09:51:25 »

Значит так как на arping не хочу делать, решил сделать что то типа такого:
значит скриптик который выбирает количество запущеных процессов под названием authtraf и если значение его равно нулю то перезапустить процес, если другое то напечатать что процес запущен и по крону каждую минуту проверять состояние процесса
вот так выглядит
Код:
#!/usr/bin/perl -w
$EXCLUDE=`ps -ax | grep authtraf | grep -v grep | wc -l`;
$PROC_NUM=0;
$RESTART="/usr/bin/perl /usr/local/nodeny/nokernel.pl -m=authtraf -d &";
if ($EXCLUDE == $PROC_NUM) {
   system ($RESTART);
}
else {
    print "Proces zapushchen\n";
}
в кроне:
Код:
*       *       *       *       *       root    /usr/bin/perl /usr/local/nodeny/restartavrotiz.pl
права:
Код:
-rw-r--r--   1 root  wheel       258  3 апр 10:22 restartavrotiz.pl
Если из оболочки запускать то всё чётко, а вот беда кода по крону, процес только добавляеться и за 10 минут "/usr/bin/perl /usr/local/nodeny/nokernel.pl -m=authtraf -d" запущен 10 раз
В программировании вообще не силён, если кому не лень помогите)
Спасибо!
Записан
ser970
NoDeny
Спец
*

Карма: 70
Offline Offline

Сообщений: 1323

262462619
Просмотр профиля Email
« Ответ #566 : 03 Апреля 2014, 12:29:48 »

Значит так как на arping не хочу делать, решил сделать что то типа такого:
значит скриптик который выбирает количество запущеных процессов под названием authtraf и если значение его равно нулю то перезапустить процес, если другое то напечатать что процес запущен и по крону каждую минуту проверять состояние процесса
вот так выглядит
Код:
#!/usr/bin/perl -w
$EXCLUDE=`ps -ax | grep authtraf | grep -v grep | wc -l`;
$PROC_NUM=0;
$RESTART="/usr/bin/perl /usr/local/nodeny/nokernel.pl -m=authtraf -d &";
if ($EXCLUDE == $PROC_NUM) {
   system ($RESTART);
}
else {
    print "Proces zapushchen\n";
}
в кроне:
Код:
*       *       *       *       *       root    /usr/bin/perl /usr/local/nodeny/restartavrotiz.pl
права:
Код:
-rw-r--r--   1 root  wheel       258  3 апр 10:22 restartavrotiz.pl
Если из оболочки запускать то всё чётко, а вот беда кода по крону, процес только добавляеться и за 10 минут "/usr/bin/perl /usr/local/nodeny/nokernel.pl -m=authtraf -d" запущен 10 раз
В программировании вообще не силён, если кому не лень помогите)
Спасибо!

monit  используй
/usr/ports/sysutils/monit

но если хочешь то  ps -ax | grep authtraf | grep -v grep | wc -l  для скрипта  полный путь надо указывать  для ps grep   или изменить окружение
Записан
ivanmfan
Постоялец
***

Карма: 9
Offline Offline

Сообщений: 131


Просмотр профиля Email
« Ответ #567 : 07 Апреля 2014, 10:03:09 »

из /var/log/debug.log заметил что скрипт events.pl обрабатывает запрос 2-4 секунды, как по мне то это долго.
Как думаете?
Код:
Apr  7 10:59:11 <local7.debug> vector-net dhcpd: execute_statement argv[2] = commit
Apr  7 10:59:11 <local7.debug> vector-net dhcpd: execute_statement argv[3] = 192.168.19.13
Apr  7 10:59:11 <local7.debug> vector-net dhcpd: execute_statement argv[4] = 0:11:f5:3e:9c:91
Apr  7 10:59:11 <local7.debug> vector-net dhcpd: execute_statement argv[5] =
Apr  7 10:59:11 <local7.debug> vector-net dhcpd: execute_statement argv[6] =
Apr  7 10:59:13 <local7.debug> vector-net dhcpd: execute_statement argv[0] = /usr/bin/perl
Apr  7 10:59:13 <local7.debug> vector-net dhcpd: execute_statement argv[1] = /usr/local/nodeny/modules/dhcp/events.pl
Записан
Fredik
NoDeny
Старожил
*

Карма: 5
Offline Offline

Сообщений: 362


Просмотр профиля
« Ответ #568 : 12 Апреля 2014, 08:40:06 »

в логе мускуля пишет вот такое, файл становится огромным приходится чистить руками.
Цитировать
140412  9:37:28 [Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE  on a table with more than one UNIQUE KEY is unsafe Statement: call radupdate('Rombas','10.126.21.230',                'user=64:66:b3:36:82:c1;nas=127.0.0.1')

9.1-RELEASE-p8 FreeBSD 9.1-RELEASE-p8

где подправить?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #569 : 12 Апреля 2014, 08:58:00 »

http://forum.nodeny.com.ua/index.php?topic=2430.0
Записан
Страниц: 1 ... 36 37 [38] 39 40 ... 88
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!