![使用 dnsmasq 和 hostapd 获取 DHCP 服务器分配的所有 IP 地址](https://linux22.com/image/1537841/%E4%BD%BF%E7%94%A8%20dnsmasq%20%E5%92%8C%20hostapd%20%E8%8E%B7%E5%8F%96%20DHCP%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%88%86%E9%85%8D%E7%9A%84%E6%89%80%E6%9C%89%20IP%20%E5%9C%B0%E5%9D%80.png)
我已经为应用程序创建了一个systemd
服务hostapd
Raspbian Jessie Lite.源代码类似这样GitHub 要点但 IP 地址范围在192.168.50.x/24
。
一切正常,各种设备都从 DHCP 服务器获取 IP 地址。但是,我不知道是否有一份记录分配给客户端的所有 IP 地址及其 MAC 地址的dnsmasq
日志hostapd
。
有没有办法解析 DHCP 服务器分发的 IP 地址?也许它们可能被记录到我不知道的文件中。例如,在详细模式下,我确实倾向于在客户端请求 IP 地址时看到消息,因此假设此信息可能被记录到文件中。
答案1
我相信 /var/lib/misc/dnsmasq.leases 是你想要的文件
如果没有,则使用 dhcp-script= 并编写自己的脚本手册页
在启动时,dnsmasq 读取 /etc/dnsmasq.conf,该文件的格式每行一个选项,与 OPTIONS 部分中详述的长选项完全相同,但没有前导“--”。
--dhcp-script= 每当创建新的 DHCP 租约、销毁旧的 DHCP 租约或完成 TFTP 文件传输时,都会运行此选项指定的可执行文件。必须是绝对路径名,不进行 PATH 搜索。该过程的参数是“add”、“old”或“del”、主机的 MAC 地址(或 IPv6 的 DUID)、IP 地址和主机名(如果已知)。“add”表示已创建租约,“del”表示已销毁租约,“old”是 dnsmasq 启动时对现有租约的通知或对现有租约的 MAC 地址或主机名的更改(如果设置了 leasefile-ro,还包括租约长度或到期时间和客户端 ID)。如果 MAC 地址来自以太网以外的网络类型,则会在前面添加网络类型,例如令牌环的“06-01:23:45:67:89:ab”。即使 dnsmasq 配置为将 UID 更改为非特权用户,该进程仍以 root 身份运行(假设 dnsmasq 最初以 root 身份运行)。
答案2
作为 Ross 答案的附录,您可以使用选项在您的文件dnsmasq.conf
(或 conf 文件中/etc/dnsmasq.d
)中指定租约文件dhcp-leasefile=<lease file>
。例如dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases
此外,尽管在某些情况下租约文件会填充主机名,但平板电脑或智能电视等某些随机设备有时无法从租约文件中清楚识别。在您的 dnsmasq conf 中,您可以添加 dhcp-host 选项,其中包含设备的 MAC 地址和友好的主机名,这些主机名将显示在租约文件中。例如
dhcp-host=10:08:c1:08:9d:53,LG-TV
dnsmaq.conf
在租约文件中如下所示:
1502229042 10:08:c1:08:9d:53 192.168.10.94 LG-TV *