我目前正在Ubuntu 8.04上运行ISC-DHCP服务器v3。 我正在做的是logging谁得到什么IP地址。
目前在DHCP日志文件中,您可以看到以下内容:
DHCPDISCOVER from d0:50:56:ac:74:71 via eth0 DHCPOFFER on 208.xx75 to d0:50:56:ac:74:71 via eth0 DHCPREQUEST for 208.xx75 (172.18.1.2) from d0:50:56:ac:74:71 via eth0 DHCPACK on 208.xx75 to d0:50:56:ac:74:71 via eth0
我想达到我看到这个或什么似是而非的点:
DHCPDISCOVER from d0:50:56:ac:74:71 via eth0 DHCPOFFER on 208.xx75 to d0:50:56:ac:74:71 via eth0 DHCPREQUEST for 208.xx75 (172.18.1.2) from d0:50:56:ac:74:71 via eth0 DHCPACK on 208.xx75 to d0:50:56:ac:74:71 (TestPC001) via eth0
我需要logging获取IP地址的主机(日志文件有时间戳记,但我为了这个post而删除了这些文件),这是为了历史目的。
在我的dhcpd.conf文件中,我有以下主机声明:
host TestPC001 { hardware ethernet d0:50:56:ac:74:71; fixed-address 208.xx75; }
如果有人知道如何做到这一点与DHCP3,这将是伟大的,我打开第三方应用程序的build议,将这样做。 需要注意的一点是,dhcpd.conf文件是使用第三方应用程序dynamic生成的,因此主机声明可以更改,所以如果networking上有人出现问题,我不能简单地查看文件并得到他们的名字。
我已经知道了。
将以下内容添加到dhcpd.conf文件中
if known { log (info, concat ("HOSTNAME: ", host-decl-name, " on ",binary-to-ascii (10, 8, ".", leased-address)," at ", binary-to-ascii (16, 8, ":", substring (hardware, 1, 6)))); }
将导致(我已经删除了整齐的时间戳):
HOSTNAME: TestPC001 on 208.xx75 at d0:50:56:ac:74:71 DHCPDISCOVER from d0:50:56:ac:74:71 via eth0 DHCPOFFER on 208.xx75 to d0:50:56:ac:74:71 via eth0 DHCPREQUEST for 208.xx75 (172.18.1.2) from d0:50:56:ac:74:71 via eth0 DHCPACK on 208.xx75 to d0:50:56:ac:74:71 via eth0
ISC DHCPD会logging客户端名称,只要客户端在DHCP请求中包含其主机名即可。
你没有提到你的客户正在运行哪个操作系统。 Linux客户端通常不会在DHCP请求中包含主机名,所以您需要添加
send host-name "hostname";
到你的/etc/dhcp3/dhclient.conf 。 (您的发行版可能configuration不同。)
Windows客户端将其计算机名称包含在DHCP请求中。
和debian / etch我粘在dhcp3上,并用dnssec绑定。 所以dhcp发送客户端主机名绑定,它更新dns区域。
她从股票Windows XP中得到了类似的东西
# tail -13 /var/lib/dhcp3/dhcpd.leases lease 10.28.0.155 { starts 3 2009/07/08 05:14:45; ends 3 2009/07/08 06:14:45; cltt 3 2009/07/08 05:14:45; binding state active; next binding state free; hardware ethernet 00:08:54:37:48:a6; uid "\001\000\010T7H\246"; set ddns-rev-name = "155.0.28.10.in-addr.arpa."; set ddns-txt = "31b6fa94a1ef1702e6eed6bef3a9fd6f31"; set ddns-fwd-name = "PC18.mydomain.lan"; client-hostname "PC18"; }
并在/var/log/daemon.log
Jul 8 07:14:45 ServerName dhcpd: DHCPOFFER on 10.28.0.155 to 00:08:54:37:48:a6 (PC18) via eth1 Jul 8 07:14:45 ServerName named[12354]: client 127.0.0.1#53673: updating zone 'mydomain.lan/IN': adding an RR at 'PC18.mydomain.lan' A Jul 8 07:14:45 ServerName named[12354]: client 127.0.0.1#53673: updating zone 'mydomain.lan/IN': adding an RR at 'PC18.mydomain.lan' TXT Jul 8 07:14:45 ServerName dhcpd: Added new forward map from PC18.mydomain.lan to 10.28.0.155 Jul 8 07:14:45 ServerName named[12354]: client 127.0.0.1#53673: updating zone '0.28.10.in-addr.arpa/IN': deleting rrset at '155.0.28.10.in-addr.arpa' PTR Jul 8 07:14:45 ServerName named[12354]: client 127.0.0.1#53673: updating zone '0.28.10.in-addr.arpa/IN': adding an RR at '155.0.28.10.in-addr.arpa' PTR Jul 8 07:14:45 ServerName dhcpd: added reverse map from 155.0.28.10.in-addr.arpa. to PC18.mydomain.lan Jul 8 07:14:45 ServerName dhcpd: Wrote 76 leases to leases file. Jul 8 07:14:45 ServerName dhcpd: DHCPREQUEST for 10.28.0.155 (10.28.0.1) from 00:08:54:37:48:a6 (PC18) via eth1 Jul 8 07:14:45 ServerName dhcpd: DHCPACK on 10.28.0.155 to 00:08:54:37:48:a6 (PC18) via eth1 Jul 8 07:16:07 ServerName dhcpd: DHCPINFORM from 10.28.0.155 via eth1 Jul 8 07:16:07 ServerName dhcpd: DHCPACK to 10.28.0.155 (00:08:54:37:48:a6) via eth1
所以我build议你安定DNSSEC: 谷歌DNSSEC Howto
ISC DHCP将分配的租约存储在一个文件中(通常是/var/run/dhcp/dhcpd.leases或类似文件)。
租赁文件的内容被logging在案:
http://linux.die.net/man/5/dhcpd.leases
有一个Perl模块可用于parsing租约文件的内容:
http://search.cpan.org/~cvicente/Text-DHCPLeases-v0.3/lib/Text/DHCPLeases.pm
你所寻求的所有信息都在租赁文件中,所以你可以很容易地编写一个程序来parsing出数据并将其存储在某个地方作为历史logging。 如果你不打算实时做这件事,那么你可以不less于一半的时间来运行它(比如,客户预计会在中途续约)。
我期望的parsing将是如此轻量级,你可以运行它不经常担心。 您也可以通过在文件上运行md5sum,将其输出存储在某处,然后每分钟检查一次更改,并将租约文件复制到一个程序可以随时更改的目录中进行分析。
只要看看文件/var/lib/dhcpd/dhcpd.leases。 我认为你在日志文件中看到的是在那里。