sunsili 发表于 2023-7-27 17:16:01

【Shell】Linux udhcpc动态获取IP命令详解

本帖最后由 sunsili 于 2024-3-1 23:45 编辑

【Shell】Linux udhcpc动态获取IP命令详解


前言
由于要使用网络通讯,所以不可避免的要用到dhcp。理想的网络通讯方式是下面3种都要支持:  1,接入已有网络。这便要求可以作为dhcp客户端。  2,作为DHCP服务器,动态分配IP。  3,指定固定IP  第3种情况没有什么好说的,简单说下前2种情况。  使用步骤:  (1)在内核的网络项里面把DHCP配置上;  (2)在busybox里面把udhcp server(udhcpd) udhcp client(udhcpc)都选上。
  udhcpd就是终端设备作为DHCP服务器  udhcpc就是终端设备作为DHCP客户端  busybox里面对dhcp都已经给出例子了,  $ ls ./examples/udhcp/  sample.boundsample.deconfigsample.naksample.renewsample.scriptsimple.scriptudhcpd.conf  比如使用udhcpc时  就可以直接把simple.script拿来使用,改不改名字都可以,busybox里面默认的目录文件是/usr/share/udhcpc/default.script  可以查看下帮助
udhcpc: option requires an argument -- h
BusyBox v1.23.2 (2023-07-24 16:54:35 CST) multi-call binary.

Usage: udhcpc [-fbqRB] [-t N] [-T SEC] [-A SEC/-n]
      [-i IFACE] [-s PROG] [-p PIDFILE]
      [-oC] [-r IP] [-V VENDOR] [-F NAME] [-x OPT:VAL]... [-O OPT]...

      -i,--interface IFACE    Interface to use (default eth0)
      -s,--script PROG      Run PROG at DHCP events (default /usr/share/udhcpc/default.script)
      -p,--pidfile FILE       Create pidfile
      -B,--broadcast          Request broadcast replies
      -t,--retries N          Send up to N discover packets (default 3)
      -T,--timeout SEC      Pause between packets (default 3)
      -A,--tryagain SEC       Wait if lease is not obtained (default 20)
      -n,--now                Exit if lease is not obtained
      -q,--quit               Exit after obtaining lease
      -R,--release            Release IP on exit
      -f,--foreground         Run in foreground
      -b,--background         Background if lease is not obtained
      -S,--syslog             Log to syslog too
      -r,--request IP         Request this IP address
      -o,--no-default-options Don't request any options (unless -O is given)
      -O,--request-option OPT Request option OPT from server (cumulative)
      -x OPT:VAL            Include option OPT in sent packets (cumulative)
                              Examples of string, numeric, and hex byte opts:
                              -x hostname:bbox - option 12
                              -x lease:3600 - option 51 (lease time)
                              -x 0x3d:0100BEEFC0FFEE - option 61 (client id)
      -F,--fqdn NAME          Ask server to update DNS mapping for NAME
      -V,--vendorclass VENDOR Vendor identifier (default 'udhcp VERSION')
      -C,--clientid-none      Don't send MAC as client identifier
Signals:
      USR1    Renew lease
      USR2    Release lease


应用


一、udhcpc -i
udhcpc是一款用于获取DHCP地址的工具。其中,“-i”选项用于指定需要获取DHCP地址的网络接口名称。sudo udhcpc -i eth0以上命令表示使用eth0接口获取DHCP地址。
二、udhcpc一直发送discover

在DHCP协议中,客户端首先需要发送discover消息,请求获取ip地址。udhcpc工具在执行时,会一直发送discover消息,直至获取成功或失败。以下是udhcpc发送discover消息的代码片段。while (!(udhcp_send_raw(discover_pkt, sizeof(discover_pkt), NULL, PEER_PORT)))
{
    if (no_background) {
      bb_error_msg("sending discover");
    } else {
      bb_info_msg("sending discover");
    }
    sleep(config_timeouts);
    if (timeout >= 7) {
      bb_error_msg("no lease, failing");
      /* Typically, client immediately sends DHCPDECLINE here,
         * and shuts down after that. We don't support it */
      return EXIT_FAILURE;
    }
}


三、udhcpc命令

udhcpc命令可用于在命令行中手动获取DHCP地址。以下是具体的命令使用方法:sudo udhcpc -i eth0

四、udhcpc参数详解

udhcpc命令还可以使用其他参数来执行特定的功能:
[*]-b: 后台执行udhcpc命令。
[*]-s: 指定脚本文件,在DHCP成功获取地址后执行该脚本文件。
[*]-H: 指定客户端主机名,会在DHCP消息中发送。
[*]-p: 指定pid文件,记录udhcpc进程的id。
[*]-t: 指定超时时间,单位为秒。

五、dhcpc工具向DHCP服务器发送discover消息


udhcpc sending discover

当udhcpc工具向DHCP服务器发送discover消息时,会进行日志记录。以下是发送discover消息时的日志输出。...udhcpc: sent discoverudhcpc: sending discoverudhcpc: lease of xxx.xxx.xxx.xxx obtained, lease time xxx...

六、udhcpc无法获取DHCP地址

udhcpc no lease failing

如果udhcpc无法获取DHCP地址,会输出“no lease, failing”的错误信息,并返回EXIT_FAILURE。udhcpc: no lease, failing以上就是对udhcpc的详细阐述,并提供相应的命令和代码示例。
页: [1]
查看完整版本: 【Shell】Linux udhcpc动态获取IP命令详解