[[SOLVED] dhcpd поймать событие]

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

спасибо

Нет, только если косвенно.

Нет, только если косвенно.

есть. на хабре погугли. там

есть. на хабре погугли. там есть в камментах на одну статью. три события - commit, release, expiry.

P.S.: Linux - это красная таблетка :-) Windows - синяя...

Это если "клиент

Это если "клиент сознательный", т.е. скажет ухожу, забирайте ИП ) А с остальными что делать? Хотя да, если смотреть с точки зрения dhcp сервера, пофиг что клиент давно свалил, без предупреждения; ИП ему выдан на время и пока оно не кончиться ИП занят.

только парсить леасы,

только парсить леасы, возможно по инотифу.
как вариант , заюзать наговские приблуды типа mysql и кидать по триггеру ( сейчас прям сам и придумал - не бейте )

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

:)

Хм... Меня всегда удивляли такие велосипедостроители - которые сами в себе. Вместо того чтоб описать задачу, конечный результат, который хочется получить.
Ведь возможно уже есть решение (инструмент) и его им бы подсказали.
Ну да ладно, я сегодня клещи для вытягивания инфы оставил на работе. :)

ты не одинок в своем

ты не одинок в своем удивлении ;)

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

ebuild R ]

ebuild   R   ] net-misc/dhcp-4.2.1  USE="doc ipv6 ssl vim-syntax -ldap (-selinux)" 0 k

cat /etc/dhcp/dhcpd.conf

... skip ...
on commit {
  set clientIP = binary-to-ascii(10, 8, ".", leased-address);
  set clientMAC = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
  set reversdnsname = concat(binary-to-ascii(10, 8, ".", reverse (1, leased-address)),".in-addr.arpa.");
#   host-decl-name
#  execute("/etc/dhcp/publish-ip-mac.pl", "commit", clientIP, clientMAC);
  execute("/etc/dhcp/publish-ip-mac.pl", "commit", clientIP, host-decl-name);
}

on release {
  set clientIP = binary-to-ascii(10, 8, ".", leased-address);
  set clientMAC = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
  execute("/etc/dhcp/publish-ip-mac.pl", "release", clientIP, clientMAC);
}

on expiry {
  set clientIP = binary-to-ascii(10, 8, ".", leased-address);
  if(exists agent.remote-id) {
    set clientMAC = binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6));
    execute("/etc/dhcp/publish-ip-mac.pl", "expiry", clientIP, clientMAC);
  } else {
    execute("/etc/dhcp/publish-ip-mac.pl", "expiry", clientIP);
  }
}

... skip ...
cat /etc/dhcp/publish-ip-mac.pl

#!/usr/bin/perl

use strict;
use warnings;

my $type = shift;
my $ip = shift;
my $mac = shift;

my $leaseFile = "/var/log/dhcp-test.log";

if(not defined($mac))
{
    $mac="00:00:00:00:00:00";
}
# Fork so we can return control
# to the dhcp server ASAP.
my $pid = fork();

# If we're the child, do whatever we need to do
if($pid == 0) {
    open(FH, ">> $leaseFile");
    print FH "$type\t$ip\t$mac\n";
    close(FH);
}

ловится все, только release очень редко(не все посылают) =(

Atlant написал(а): ловится

Atlant написал(а):
ловится все, только release очень редко(не все посылают) =(

да, действительно, спасибо огромное...

вопрос в догонку: а вот событие, когда dhclient подтверждает свое присутствие в сети, поймать можно? то есть когда ему уже выдан ip, он периодически передает какие - то подтверждения и сервер знает о том, что он жив.

скорее всего, тот же commit -

скорее всего, тот же commit - ему же leasetime выдан, по истечении клиент дергает сервер. даже находясь в сети.

P.S.: Linux - это красная таблетка :-) Windows - синяя...

кстати, ты не знаешь,

кстати, ты не знаешь, возможно ли вытащить client-identifier в событии освобождения адреса? я чо - то пытался передать в скрипт опцию, не выходит?

Цитата:
on expiry
{
execute("/mnt/script/dhcp-logout.sh", option dhcp-client-identifier);
}

я думаю, expiry - это

я думаю, expiry - это внутреннее событие сервера и от клиента оно не зависит. С клиентом связны только commit и release. ИМХО.

P.S.: Linux - это красная таблетка :-) Windows - синяя...

придется через Ж чистить dns

придется через Ж чистить dns записи
спасибо вам за помощь

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".