谷动谷力

 找回密码
 立即注册
查看: 2870|回复: 0
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
发表于 2023-7-27 17:16:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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都已经给出例子了,

  [zhh@localhost busybox-1.14.1]$ ls ./examples/udhcp/

  sample.bound  sample.deconfig  sample.nak  sample.renew  sample.script  simple.script  udhcpd.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消息的代码片段。
  1. while (!(udhcp_send_raw(discover_pkt, sizeof(discover_pkt), NULL, PEER_PORT)))
  2. {
  3.     if (no_background) {
  4.         bb_error_msg("sending discover");
  5.     } else {
  6.         bb_info_msg("sending discover");
  7.     }
  8.     sleep(config_timeouts[timeout++]);
  9.     if (timeout >= 7) {
  10.         bb_error_msg("no lease, failing");
  11.         /* Typically, client immediately sends DHCPDECLINE here,
  12.          * and shuts down after that. We don't support it */
  13.         return EXIT_FAILURE;
  14.     }
  15. }
复制代码



三、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的详细阐述,并提供相应的命令和代码示例。

+18

最近谁赞过

本帖被以下淘专辑推荐:

  • · Shell|主题: 28, 订阅: 0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-12-28 15:54 , Processed in 0.100716 second(s), 42 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表