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

结果验证

连接结果

日志结果

验证成功

相关推荐
半仙白桑25 分钟前
内核篇第十五讲:system-V共享内存
linux·共享内存·shmget·shmat·shmdt·shmctl
一条破秋裤42 分钟前
Linux 线程创建:pthread_create 与基本回收
java·linux·运维
可涵不会debug1 小时前
第一次学 LangGraph:用一个快递案例搞懂 State、Node、Edge 和 compile
服务器·数据库·mysql
s6516654962 小时前
IDT和GDT是什么
linux
Android系统攻城狮2 小时前
Linux Gstreamer深度解析之gst_audio_decoder_set_estimate_rate调用流程与实战(四十五)
linux·gstreamer音视频·音视频进阶
Web极客码3 小时前
抹平首包开销:我用 Claude 调优 Nginx 的 Brotli 与 Gzip 动态压缩,平衡 CPU 与网络吞吐
服务器·agent 工作流·agent 图
FED_AF3 小时前
Linux运维“邪修”功法之通配符
linux·运维
箓维3 小时前
线程的概念和理解
linux
云杂项3 小时前
tmux指南:安装、配置与高效使用(Ubuntu上)
linux·服务器·ubuntu
YOLO数据集集合3 小时前
风机叶片表面损伤检测数据集 | 风机叶片 表面损伤 污渍检测 无人机巡检 风电运维9119期
运维·人工智能·计算机视觉·目标跟踪·无人机·智慧城市·电力巡检