好,我给你把 udhcpc 讲详细一点,让你不仅知道它怎么用,还知道它在系统里到底干了什么。


1. udhcpc 是什么

  • 全称Micro DHCP Client
  • 是 BusyBox 提供的一个轻量级 DHCP 客户端,常用在嵌入式 Linux、路由器、IoT 设备上。
  • 作用:向 DHCP 服务器(例如路由器)请求 IP 地址、网关、DNS 等网络参数,并配置到系统网卡。

简单理解:udhcpc 就是给你的设备“自动申请 IP”的工具,类似桌面 Linux 里的 dhclient,但更轻、更快。


2. 基本用法

获取 IP 地址

udhcpc -i eth0
  • -i eth0:指定网卡
  • 运行后会广播 DHCP 请求,收到服务器响应后自动配置 IP、网关和 DNS。

后台运行(daemon 模式)

udhcpc -i eth0 -b
  • -b:获取 IP 后进入后台运行,保持租约,定期续租。

指定主机名

udhcpc -i eth0 -x hostname:mydevice
  • 向 DHCP 服务器报告自己的主机名(有些路由器会显示)。

指定请求的 IP

udhcpc -i eth0 -r 192.168.1.100
  • 尝试向服务器申请指定的 IP(是否能成功取决于服务器是否同意)。

3. 工作机制

udhcpc 运行时主要做三步:

  1. 发送 DHCP Discover → 广播找 DHCP 服务器。
  2. 等待 Offer → 服务器返回可用 IP 和配置信息。
  3. 发送 Request 并获取 Ack → 确认使用这个 IP,并应用到网卡。

它在这个过程中会调用一个 脚本 hook(默认 /usr/share/udhcpc/default.script 或 /etc/udhcpc/default.script),负责:

  • 配置 ip addr(给网卡分配 IP)
  • 配置 ip route(设置默认网关)
  • 修改 /etc/resolv.conf(配置 DNS)

所以如果你发现 IP 申请成功但网卡没配置好,大概率是这个脚本缺失或没执行。


4. 常用参数表

参数说明
-i <iface>指定网卡(必选)
-b后台运行
-n如果没获取到 IP 直接退出(默认会一直重试)
-q安静模式(不输出日志)
-x hostname:<name>指定主机名
-r <ip>请求指定 IP
-s <script>使用自定义配置脚本
-p <file>写入 PID 到文件
-v输出详细调试信息

5. 示例:手动获取 IP 并应用

假设网卡是 eth0

ip link set eth0 up
udhcpc -i eth0 -n -q
  • 先启动网卡
  • 再用 udhcpc 获取 IP
  • -n 失败直接退出,-q 安静模式

6. 停止 udhcpc

如果想停止 DHCP 客户端(例如改成静态 IP):

killall udhcpc

或者:

pkill udhcpc

7. 调试技巧

查看 DHCP 流程:

udhcpc -i eth0 -v

如果服务器没响应,可能是:

  • 网线/无线连接问题
  • DHCP 服务没开
  • VLAN/防火墙阻止广播包