【问题标题】:Is there any way to trigger DHCP via C code有没有办法通过C代码触发DHCP
【发布时间】:2018-10-04 08:26:32
【问题描述】:

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

【问题讨论】:

  • 我会说不,DHCP客户端进行DHCP通话并使用ioctl设置IP地址等
  • 您的 DHCP 客户端可能公开一个允许与之对话的 API。

标签: c linux networking


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢,你的意思我明白了,我也是用系统触发udhcpc客户端的。但是由于某些安全原因,系统调用不能直接在我的项目中使用。这就是为什么要考虑另一种方式。根据您的解释,我现在很清楚需要做什么,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 2010-10-12
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多