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的错误处理

结果验证

连接结果

日志结果

验证成功

相关推荐
Linux-lucky20 分钟前
36-Linux学习之旅之MySQL主从复制
linux·运维·学习·mysql·ubuntu
SatanII26 分钟前
华为云ECS实践:从创建、镜像制作到弹性伸缩完整实操指南
linux·运维·服务器·学习·centos·华为云
广州灵眸科技有限公司27 分钟前
瑞芯微(EASY EAI)RV1126B 星闪使用
运维·人工智能·科技·docker·容器
努力努力再努力wz30 分钟前
【Docker入门系列】:从 Namespace 到 CGroup:一文理解容器资源控制、cgroup v2 与 Memory Controller 实战
运维·docker·容器
可乐鸡翅yeah_34 分钟前
HLS 自动化拨测与手动调试分工,流媒体线上监控体系建设实践
运维·自动化·测试用例·音视频·媒体·m3u8·音视频在线播放
Raas10037 分钟前
MAI Gateway(魔芋企业级AI网关)对比分析:AI网关和OpenRouter区别?企业级能力差距一览
java·服务器·网络·人工智能·gateway·ai网关·mai gateway
爱和冰阔落42 分钟前
【Linux】epoll 真的是 O(1) 吗?从阻塞 I/O、select/poll 到 LT/ET 与 Reactor 一次讲透
linux·运维·高并发·tcp
tedcloud1231 小时前
VoiceStudio 怎么搭建?开源本地 AI 语音克隆、配音与语音工作室
服务器·人工智能·开源·ai编程
11路没有终点1 小时前
Docker 化测试环境:一致性交付
运维·docker·容器
风景的人生1 小时前
Linux虚拟机网络故障排查与解决方案
运维·网络·ssh