Linux Wlan无线网络开发之DHCP预留功能 实操demo

前言(也是实践内容基础框架展示)

前面简单讲解了类似于Auth这种大类,会涉及到应用层、内核、驱动层 整个基础框架的需求,而此次的实践实操则只涉及或者我们只讨论应用层部分:

实践内容

  • 将指定mac的设备分配192.168.1.88 ip地址进行网络访问

步骤解析为如下:

  1. udhcp源码移植并使用
  2. udhcp源码流程解析
  3. DHCP预留功能开发与验证

DHCP预留(或者静态IP分配、IP-MAC绑定等等)

  • 这指的是在路由器上的一种配置,将某个特定的IP地址固定地、永久地分配给网络中的某一个特定设备
如何去判定应该分配给哪一个设备呢?
  • 通过其MAC地址识别(从别名IP-MAC绑定亦可看出)

手把手实操

udhcp源码移植并使用

  1. 源码下载:wget https://udhcp.busybox.net/source/udhcp-0.9.8.tar.gz

    并解压 tar -zxvf udhcp-0.9.8.tar.
  2. 编译:
    文件创建:build.sh
    修改执行权限:chmod +x build.sh
    执行命令:./build.sh
  3. 生成文件
  4. 关闭系统不必要的网络服务
    停止冲突服务(不需要linuxwlanmanager来管理wifi了)
    sudo systemctl disable NetworkManager
    sudo systemctl disable dnsmasq
  5. 创建udhcpd.conf文件:sudo vim /etc/udhcpd.conf
  6. 创建租约文件:使用 touch /var/lib/misc/udhcpd.leases 创建租约文件(持久化记录所有分配)

    设置正确的权限
  7. 启动hostapd进程(在这里就不在赘述以前的文章了)
    sudo hostapd /etc/hostapd/hostapd.conf -B
  8. 启动udhcpd进程
    /usr/sbin/udhcpd /etc/udhcpd.conf -f
  9. 无线连接测试:拿到的地址是192.168.1.2

udhcp源码流程解析

  1. 流程罗列:
    tcpdump 抓包的四个流程:
  2. 流程交互重点(核心字段在DHCP交互四步中的体现)

    对如上参数进行解释
  3. 代码流程

    需要明确的message 参数:
  4. 代码解析:
    接收到DHCPDISCOVER后发送OFFER包给客户端:

    处理 DHCPREQUEST 报文逻辑

    注释解释

清楚了如何使用udhcpd和理解了代码逻辑才能进行需求开发,所以前面内容不可或缺

DHCP预留功能开发与验证

开发逻辑梳理

1)需要创建存储DHCP预留的信息内存

2)需要创建用于纠错分配ip的哈希表(比如分配到了在DHCP预留中的ip,此时需要重新分配新的ip)

3)对于匹配到DHCP预留的设备进行预留功能设置

  1. 存储DHCP预留的信息静态内存(写死为设备8a4c11918cd9分配192.168.1.88)
  2. 创建用于纠错分配ip的哈希表
    哈希表定义:


    哈希表初始化:

    哈希表插入:
  3. DHCP预留的设备进行预留功能设置

    通过指针返回需要分配后的ip,分配后进行发送
  4. 在ACK中进行ip分配校验:

    对于
    1)预留分配ip和client请求ip一致性校验
    2)对非预留设备请求到预留ip的错误处理

结果验证

连接结果

日志结果

验证成功

相关推荐
代码游侠1 小时前
复习——线性表
linux·c语言·数据结构·学习·算法
DeeplyMind1 小时前
第5章:并发与竞态条件-12:Locking Traps
linux·驱动开发·ldd
dragoooon341 小时前
[Linux网络基础——Lesson11.「NAT & 代理服务 & 内网穿透」]
linux·网络·智能路由器
段帅龙呀1 小时前
服务器因BIOS设置导致无法正常做RAID修复
运维·服务器·raid
dragoooon341 小时前
[Linux网络基础——Lesson10.「数据链路层 & ARP 具体过程 & ARP 欺骗」]
linux·网络·网络协议
Dovis(誓平步青云)1 小时前
《Linux 网络实战手册:从 TCP/IP 协议栈到 UDP网络通信》
linux·网络·tcp/ip
国科安芯1 小时前
AS32A601型MCU芯片flash模块的擦除和编程
java·linux·前端·单片机·嵌入式硬件·fpga开发·安全性测试
不悔哥1 小时前
路由器特性——网络状态检测
linux·c语言·网络·tcp/ip·智能路由器
90后小陈老师2 小时前
记录一次Figma订阅被多扣费的教训
java·linux·数据库