我目前正在 Ubuntu 8.04 上运行 ISC-DHCP 服务器 v3。我想做的是记录谁在何时获得了什么 IP 地址。
目前,在 DHCP 日志文件中您可以看到以下内容:
DHCPDISCOVER from d0:50:56:ac:74:71 via eth0
DHCPOFFER on 208.x.x.75 to d0:50:56:ac:74:71 via eth0
DHCPREQUEST for 208.x.x.75 (172.18.1.2) from d0:50:56:ac:74:71 via eth0
DHCPACK on 208.x.x.75 to d0:50:56:ac:74:71 via eth0
我想达到我看到这一点或类似的东西的目的:
DHCPDISCOVER from d0:50:56:ac:74:71 via eth0
DHCPOFFER on 208.x.x.75 to d0:50:56:ac:74:71 via eth0
DHCPREQUEST for 208.x.x.75 (172.18.1.2) from d0:50:56:ac:74:71 via eth0
DHCPACK on 208.x.x.75 to d0:50:56:ac:74:71 (TestPC001) via eth0
我需要记录获取 IP 地址的主机(日志文件有时间戳,但我为这篇文章删除了它们)以供历史记录。
在我的 dhcpd.conf 文件中,我有以下主机声明:
host TestPC001 {
hardware ethernet d0:50:56:ac:74:71;
fixed-address 208.x.x.75;
}
如果有人知道如何使用 DHCP3 来实现这一点,那就太好了,我愿意听取有关第三方应用程序的建议。需要注意的一点是,dhcpd.conf 文件是使用执行 RADIUS 的第三方应用程序动态生成的,因此主机声明可以并且将会改变,因此如果网络上有人出现问题,我不能只是查看文件并获取其名称。
答案1
我已经明白了。
将以下内容添加到 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.x.x.75 at d0:50:56:ac:74:71
DHCPDISCOVER from d0:50:56:ac:74:71 via eth0
DHCPOFFER on 208.x.x.75 to d0:50:56:ac:74:71 via eth0
DHCPREQUEST for 208.x.x.75 (172.18.1.2) from d0:50:56:ac:74:71 via eth0
DHCPACK on 208.x.x.75 to d0:50:56:ac:74:71 via eth0
答案2
ISC DHCP 将分配的租约存储在一个文件中(通常是 /var/run/dhcp/dhcpd.leases 或类似文件)。
租约文件的内容记录如下:
http://linux.die.net/man/5/dhcpd.leases
并且有一个 Perl 模块可用于解析租约文件的内容:
http://search.cpan.org/~cvicente/Text-DHCPLeases-v0.3/lib/Text/DHCPLeases.pm
您需要的所有信息都在租约文件中,因此您可以轻松编写程序来解析数据并将其存储在某个历史位置。如果您不想实时执行此操作,您可能只需运行它的频率不低于租约时间的一半(因为客户端预计会在租约中途续订)。
我期望解析过程非常轻量,您可以放心地频繁运行它。您还可以通过在文件上运行 md5sum 来获得更好的效果,将其输出存储在某个地方,然后每分钟检查一次更改,并将租约文件复制到一个目录中,这样程序就可以在文件发生更改时对其进行分析。
答案3
只要客户端在 DHCP 请求中包含其主机名,ISC DHCPD 就会记录客户端名称。
您没有提到客户端运行的是哪种操作系统。Linux 客户端通常不会在 DHCP 请求中包含其主机名,因此您需要添加
send host-name "hostname";
到你的/etc/dhcp3/dhclient.conf
。 (你的发行版可能配置不同。)
Windows 客户端在 DHCP 请求中包含其计算机名称。
答案4
只需查看文件 /var/lib/dhcpd/dhcpd.leases。我认为您在日志文件中查找的内容就在那里。