DHCP:在日志文件中记录主机声明

DHCP:在日志文件中记录主机声明

我目前正在 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/dh​​cpd/dhcpd.leases。我认为您在日志文件中查找的内容就在那里。

相关内容