LINUX.ORG.RU

разбор dhcp.leases


0

0

Извиняюсь, но не могу сообразить как разобрать лог dhcp. Нужно это сделать на перле, а я еще только начинающий в этом деле. есть лог:

lease 192.168.5.47 {
  starts 5 2005/03/18 09:55:27;
  ends 2 2005/04/19 09:55:27;
  binding state active;
  next binding state free;
  hardware ethernet 00:02:2e:f0:87:46;
  uid "\001\000\002.\360\207F";
  set ddns-rev-name = "47.5.168.192.in-addr.arpa.";
  set ddns-txt = "318e8ff38e365317754eaf70861b2cc0fe";
  set ddns-fwd-name = "mss6.test.local";
  client-hostname "mmm6";

из него нужно вытащить айпишку, даты, мак-адрес и имя машины. Алгоритм то я примерно понял какой должен быть, а вот как стредствами перла это осуществить - не доходит. 

Не пинайте сильно. Помогите, плиз, скриптиком.
anonymous

Re: разбор dhcp.leases

а там лог типа
lease x.x.x.1 {
.....
.....
}
lease x.x.x.2 {
.....
.....
}
да ?
в-общем , вот для затравки:
open(LOG,"/path/xxx.log") or die $!;
while(<LOG>) {
chomp;
if ( /^lease/ ) { $ip = (split( / /, $_))[1] ;}
if ( /^hardware ethernet/ ) { $mac{$ip} = (split( / /, $_))[2] ;}
.....
}
close(LOG);

sasha999 ★★★★ ()
Ответ на: Re: разбор dhcp.leases от sasha999

Re: разбор dhcp.leases

в принципе то что нужно, но не совсем. Я пониаю что баран в перле,
но объясните почему он не то выводит?
вот сакрипт:
open(LOG,"/var/state/dhcp/dhcpd.leases") or die $!;
while(<LOG>) {
chomp;
if ( /^lease/ ) { $ip = (split( / /, $_))[1] ;}
if ( /starts/ ) { $starts = (split( / /, $_))[2] ;}
if ( /hardware ethernet/ ) { $mac = (split( / /, $_))[2] ;}
 if ( /client-hostname/ ) { $name = (split( / /, $_))[3] ;}
print "$ip      $starts $mac    $name\n";
}
close(LOG);
а выводит он мне следующее:

192.168.4.50    starts  hardware        "Jonny";
192.168.4.50    starts  hardware        "Jonny";
192.168.4.50    starts  hardware        "Briginec";
192.168.4.50    starts  hardware        "Briginec";

anonymous ()
Ответ на: Re: разбор dhcp.leases от anonymous

Re: разбор dhcp.leases

видимо у тебя в начале не 1 пробел перед starts и hardware, а больше - убери их или лучше замени разделитель в split-e c / / на /[\s]+/

sasha999 ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.