[[SOLVED] dhcpd поймать событие]
null56 11 Августа, 2011 - 18:09
Всем привет
события:
- клиент хочет получить адрес, он обращается к серверу, тот ему его выдает, это событие ловится и могу вполне спокойно вызвать скрипт в этот момент
- а когда клиент пропал и выданный ранее ему адрес снова становится доступным для выдачи, этот момент можно как - нибудь поймать?
спасибо
»
- Для комментирования войдите или зарегистрируйтесь

Нет, только если косвенно.
Нет, только если косвенно.
есть. на хабре погугли. там
есть. на хабре погугли. там есть в камментах на одну статью. три события - 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 ]
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 написал(а): ловится
да, действительно, спасибо огромное...
вопрос в догонку: а вот событие, когда dhclient подтверждает свое присутствие в сети, поймать можно? то есть когда ему уже выдан ip, он периодически передает какие - то подтверждения и сервер знает о том, что он жив.
скорее всего, тот же commit -
скорее всего, тот же commit - ему же leasetime выдан, по истечении клиент дергает сервер. даже находясь в сети.
P.S.: Linux - это красная таблетка :-) Windows - синяя...
кстати, ты не знаешь,
кстати, ты не знаешь, возможно ли вытащить client-identifier в событии освобождения адреса? я чо - то пытался передать в скрипт опцию, не выходит?
я думаю, expiry - это
я думаю, expiry - это внутреннее событие сервера и от клиента оно не зависит. С клиентом связны только commit и release. ИМХО.
P.S.: Linux - это красная таблетка :-) Windows - синяя...
придется через Ж чистить dns
придется через Ж чистить dns записи
спасибо вам за помощь