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

lightsquid + dhcpd

Добавлено: 2009-03-19 10:39:42
BlackPhantom
Добрый день. Использую сабжевую связку для анализа логов сквида, но поскольку адреса раздаются по dhcp, использую ip2name функцию, та что в комплекте не работает, видимо обрабатывает лог устаревшего вида, нашел на ру-боарде функцию под новый формат dhcp, вот такого вида

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

#use /var/db/dhcpd/dhcpd.leases  
#look like  
#lease 192.168.0.85 {  
#  starts 3 2007/11/07 01:56:06;  
#  ends 3 2007/11/14 01:56:06;  
#  binding state active;  
#  next binding state free;  
#  hardware ethernet 00:15:f2:e0:69:4d;  
#  uid "\001\000\025\362\340iM";  
#  client-hostname "Sasha";  
#}  
  
use Socket;  
  
sub StartIp2Name() {  
  my $body = Readdhcpd_leases();  
  while ($body =~ m/\nlease (.*?)\s?\{(.*?)\}/sig) {  
        my $ip = $1;  
        my $tmp = $2;  
        $tmp =~ m/\n(.*)?hostname\s"(.*)?"/;  
        my $host = $2;  
        $host = "\u\L$host";  
        $hIP{$ip} = $host;  
  }  
}  
  
sub Ip2Name($$$) {  
  #$Lhost,$user,$Ltimestamp  
  if (exists($hIP{$Lhost})) {  
        $Lhost = $hIP{$Lhost};  
  }  
  return $Lhost;  
}  
  
sub StopIp2Name() {  
}  
  
sub Readdhcpd_leases() {  
  local $/;  
  my $file;  
  open FFAAAA,"<","/var/db/dhcpd/dhcpd.leases";  
  $file=<FFAAAA>;  
  close FFAAAA;  
  return $file;  
}  
  
#warning !!!!  
1;
только вот иногда каша получается, вот такая:

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

user: 11 
size: 1384353366 
172.24.1.10                667802665           24778       263218123 
Malenkov                   204689763           21302          428706 
172.24.1.20                170909620            2922         1254168 
172.24.1.186               106307641           14843           73384 
172.24.1.112                85293200           18133          908271 
172.24.1.195                43194559            7443          254917 
172.24.1.184                40177823           10832          694825 
 
  starts 3 2009/03/18 16:33:04; 
  ends 3 2009/03/18 18:33:04; 
  tstp 3 2009/03/18 18:33:04; 
  binding state free; 
  hardware ethernet 00:1f:d0:03:56:c9; 
  uid "\001\000\037\320\003v\311"; 
        29915464            6048          138359 
 
  starts 3 2009/03/18 16:36:42; 
  ends 3 2009/03/18 18:36:42; 
  tstp 3 2009/03/18 18:36:42; 
  binding state free; 
  hardware ethernet 00:1f:d0:03:56:cf; 
  uid "\001\000\037\320\003v\317"; 
        26324799            1726           55565 
172.24.1.161                 8435789            1777          318336 
172.24.1.145                 1302043             176               0
а должно быть:

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

user: 7 
size: 29781240 
Goloborodiy                 12422487             387            4306 
Malenkov                     7812933            2883           70506 
Yakovlev                     1318157              39           10795 
Kudin                        1262364              20            1804 
Samoilenko                    824739              15               0
я так подозреваю, что происходит потому что в файле /var/db/dhcpd/dhcpd.leases в некоторый случаях появляется строчка "uid", а в некоторых нет, поэтому сбивается форматирование... подскажите как решить, или как оптимизировать скрипт, чтоб корректно считывалось...

Re: lightsquid + dhcpd

Добавлено: 2009-06-08 11:00:07
Alex Keda
лучше заставьте их авторизоваться

Re: lightsquid + dhcpd

Добавлено: 2009-06-08 13:33:16
esl
BlackPhantom писал(а):Добрый день. Использую сабжевую связку для анализа логов сквида, но поскольку адреса раздаются по dhcp, использую ip2name функцию, та что в комплекте не работает, видимо обрабатывает лог устаревшего вида, нашел на ру-боарде функцию под новый формат dhcp, вот такого вида

http://forum.ru-board.com/topic.cgi?for ... &start=280

там чуть другая есть, проверь ее

sub StartIp2Name() {
my $body = Readdhcpd_leases();
while ($body =~ m/\nlease (.*?)\s?\{(.*?)\}/sig) {
my $ip = $1;
my $tmp = $2;
$tmp =~ m/\n(.*)?hostname\s"(.*)?"/;
my $host = $2;
if ($host =~ /starts/) {$host = $ip;}
$host = "\u\L$host";
$hIP{$ip} = $host;
}
}