Все просто на самом деле:
1. При аторизации на исполнение уходит скрипт auth-up, он вызывает другой сценарий.
2. Листинг другого сценария:
Код:
#!/usr/bin/perl
use strict;
use Mysql;
my $log_path = "/var/log/messages";
sub GetLog {
my @lines;
open (TXTFILE, $_[0]);
@lines = <TXTFILE>;
close(TXTFILE);
return @lines;
};
my $q = "created";
my @result = grep /\s$q\s/, GetLog ($log_path);
my ($line, $mac_adr) = "";
foreach $line (@result) {
if ($line =~ /\w+\s+(\w+:\w+:\w+:\w+:\w+:\w+)\s+/) {
$mac_adr=$1;
};
};
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime (time);
my $date = 1900+$year."-".(1+$mon)."-".$mday;
my $login = $ARGV[0];
my $If = $ARGV[1];
my $MAC_DB = Mysql->Connect("localhost","MAC_base");
my $Res = $MAC_DB->Query("SELECT * FROM center WHERE login = \"$login\"") or die $Mysql::db_errstr;
my $Count = $Res->rows;
my @Rows;
if ($Count==0) {
$MAC_DB->Query("INSERT INTO center ( login, mac, date1, accept) VALUES(\"$login\" , \"$mac_adr\", \"$date\", 1)") or die $Mysql::db_errstr;
} else {
$Res = $MAC_DB->Query("SELECT * FROM center WHERE login = \"$login\" AND mac = \"$mac_adr\" AND accept = 1") or die $Mysql::db_errstr;
$Count = $Res->rows;
if ($Count == 0) {
$Res = $MAC_DB->Query("SELECT * FROM center WHERE login = \"$login\" AND mac = \"$mac_adr\" AND accept = 0") or die $Mysql::db_errstr;
$Count = $Res->rows;
if ($Count==0) {
$MAC_DB->Query("INSERT INTO center ( login, mac, date1, accept) VALUES(\"$login\" , \"$mac_adr\", \"$date\", 0)") or die $Mysql::db_errstr;
};
system ("/sbin/ifconfig $If down");
print "User $login with MAC $mac_adr at $date is disconnected\n";
};
};
exit;
Лог messages пополняется следующими сообщениями типа:
Код:
Jan 30 09:51:34 gateway pppoe-server[1089]: Session 10 created for client 00:15:f2:3b:5b:30 (10.67.15.10) on eth0 using Service-Name ''
На доли секунды в которые все просиходит, запись о старте сессии является последним сообщением PPPoE сервера