解析udhcpd的租借文件udhcpd.leases

目录

1 平台环境

2 应用场景说明

3 解析

3.1 怎么找到这个租借文件

3.2 找到修改租借文件的源代码

3.3 源码解析

3.4 提示


1 平台环境

        rk3399、buildroot 2018.02-rc3、linux 4.4。

2 应用场景说明

        本文的应用场景是设备端通过WiFi AP模式对外提供热点,用户使用手机连接热点,每个手机都会获取到一个IP地址,设备端会记下手机的一些信息,比如手机的MAC、IP等,我们把记录这些信息的文件叫租借文件。

3 解析

        udhcpd是busybox提供的动态分配IP地址的命令。每次给client分配一个IP地址都会在租借文件中添加相应的内容。

3.1 怎么找到这个租借文件

cd buildroot

make busybox-menuconfig

        Busybox Configuration -> Networking Utilities -> udhcpd (DHCP server)及其子选项,其中可以指定租借文件的绝对路径,比如我的配置为/var/lib/misc/udhcpd.leases(而/var/lib/misc软链接到了/tmp,呵呵)。

3.2 找到修改租借文件的源代码

        使用grep命令死劲搜索,首先在buildroot下搜索/var/lib/misc/udhcpd.leases,命令如下:

grep -nr '/var/lib/misc/udhcpd.leases' .

        发现如下这一行,说明相关的内容在busybox-1.27.2内部无疑,

./output/build/busybox-1.27.2/.config:945:CONFIG_DHCPD_LEASES_FILE="/var/lib/misc/udhcpd.leases"

        进入busybox-1.27.2,cd ./output/build/busybox-1.27.2/,继续搜索/var/lib/misc/udhcpd.leases,命令如下:

grep -nr '/var/lib/misc/udhcpd.leases' .

        发现如下这一行,说明内部处理时是按照LEASES_FILE来修改文件的,

./networking/udhcp/dhcpd.h:13:#define LEASES_FILE             CONFIG_DHCPD_LEASES_FILE

        继续搜索LEASES_FILE,命令如下:

grep -nr 'LEASES_FILE' .

        发现如下一行,基本可以确定修改租期文件的源代码在dumpleases.c中,

./networking/udhcp/dumpleases.c:37:     const char *file = LEASES_FILE;

3.3 源码解析

        进入dumpleases.c,发现该文件只有一个函数dumpleases_main,稍微分析一下该函数即可确定租期文件就是由这个函数改变的。没有去深究细节,只讲个大概,在函数的开头发现了一个结构体变量struct dyn_lease lease,进去一看,和租期文件的内容大致相近。现在,租期文件udhcpd.leases已经没那么神秘了。

        文件的最开始的8个字节为本文件的修改时间,0x000000006125dc40,转换为整数是1,629,871,168,跟当前时间(2021-08-25 14:20分左右)转为UTC时间一致。从第9个字节开始就是struct dyn_lease的内容,该结构体的大小为36个字节,即每次增加一个client就会增加36个字节。后面加进来的client的信息会放在文件的前面,比如上图oppo比vivo后接入热点,但是oppo的信息放在vivo的前面。

3.4 提示

        这里提到的一些路径或者文件貌似都是在编译的时候写死的,其实不然,毕竟这Unix哲学的“简单原则”,你可以通过修改udhcpd.conf在执行命令的时候指定租借文件的绝对路径,也可以指定租期(expires,默认为864000秒,即10天),更多信息可以直接查看该文件的内容。

        当有新的client接入热点时会向udhcpd.leases增加信息,但是当client离开(比如忘记网络)时不会把该client的信息删除。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ta是一个搬运工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值