首页 > 解决方案 > 有没有办法通过C代码触发DHCP

问题描述

要设置静态 IP,我们有 Linux Ioctls 调用,通过它我们可以设置 IP、网关、广播。我们对 DHCP 有类似的 ioctl 调用吗?

标签: clinuxnetworking

解决方案


DHCP是一个协议,而不是一个“动作”。DHCP 指定主机应“如何”枚举 ip。

如果您想使用 DHCP 协议触发 ip 枚举(我的意思是向网络发送 DHCPDISCOVER 或 DHCPREQUEST 然后对响应进行操作),则没有 ioctl 命令。使用 DHCP 协议以及 ip 枚举和分配响应称为“dhcp 客户端”的用户空间应用程序,例如dhcpcdsystemd-networkddhclientNetworkManager

ioctl对流执行各种操作,通常ioctl作为对内核的调用来实现。内核没有“dhcp 客户端”,即。客户端是在用户端实现的。内核不对 DHCP 相关的操作负责。DHCP 相关操作没有 ioctl 调用。有一个ioctl_list可供检出。

如果您想使用 C 触发 DHCP 枚举,您需要识别系统使用的 dhcp 客户端,然后通知它/强制它执行您请求的操作。或者您可以编写自己的 dhcp 客户端。在我的系统上,我使用 NetworkManager。由于我没有时间学习如何使用 DBUS 与 NetworkManager 通信,并且我的系统上安装了nmcli工具,我可以从 C 调用系统来强制在我的系统上更新 DHCP 租约:system("nmcli con down id MY_WIFI_NAME; nmcli con up id MY_WIFI_NAME;");.


推荐阅读