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

结果验证

连接结果

日志结果

验证成功

相关推荐
程途拾光1582 小时前
企业部门协作泳道图制作工具 PC端
大数据·运维·流程图
dishugj3 小时前
【linux】Redhat 6.3系统安装zabbix-agent软件包,无法使用YUM源问题
linux·运维·zabbix
无奈笑天下3 小时前
【麒麟镜像vmtools异常排查指导书】
linux·运维·经验分享·云计算·kylin
dajun1811234563 小时前
PC端中文免费在线跨职能泳道图制作工具
运维·架构·流程图·敏捷流程·交通物流
Xの哲學4 小时前
Linux多级时间轮:高精度定时器的艺术与科学
linux·服务器·网络·算法·边缘计算
FlourishingMind4 小时前
蓝牙授时CTS (Current Time Service)、PTP、NTP
运维·服务器·网络
2301_800050994 小时前
docker
运维·docker·容器
QT 小鲜肉4 小时前
【Linux命令大全】001.文件管理之mmove命令(实操篇)
linux·服务器·前端·chrome·笔记
Winner13005 小时前
查看rk3566摄像头设备、能力、支持格式
linux·网络·人工智能
MaximusCoder5 小时前
Linux信息收集Command
运维·服务器·经验分享