1 DHCP优缺点
2 基础知识
2.1 介绍
名字:Dynamic Host Configuration Protocol -> DHCP
前身:Bootp
传输层:UDP
端口号:’DHCP server’67 ‘DHCP client’68
2.2 报文流程-无中继
2.3 报文流程-有中继
2.4 报文类型
2.5 报文格式
2.6 CS典型交互流程
2.6.1 步骤1 Discover
2.6.2 步骤2 Offer
2.6.3 步骤3 Request
2.6.4 步骤4 ACK
2.6.5 客户端重启
重启后,可直接跳过step1 discover和step2 offer,进入step3 request
3 服务器端源码分析
3.1. 概览
本节是对busybox自带的dhcp服务端源码的分析,分析的主要目的是要掌握如下几点内容:
l 重要的全局变量和结构体定义
l 租赁IP的管理
l 收包-发包间的联系
- 收到DISCOVER-发OFFER
- 收到REQUEST-发ACK/NAK
- 收到DECLINE
- 收到RELEASE
- 收到INFORM-发ACK
3.2 结构体-DHCP格式
3.3 全局变量 server_config
3.4 全局变量 IP池
3.5 IP的租赁管理
3.6 报文的收发对应关系
3.7 接收Discover
3.8 接收Request
3.9 接收Decline
3.10 接收Release
3.11 接收Inform
4 测试
(1)测试用例
分析:
步骤4结束后,dhcp server的ip地址池有192.168.1.2和192.168.1.3的使用记录。
步骤5中dhcp client并没有主动发release报文,而是直接和dhcp server断开联系。
步骤8中当dhcp client重新接入dhcp server时,直接使用之前用过的ip地址192.168.1.3.
步骤9中dhcp client无法再获得ip地址,原因如下:
Dhcp server收到申请192.168.1.3的Request后,直接回复了ACK。
Dhcp client收到ACK后,有检测到该IP地址已经不能使用,但并没有再次发Decline给dhcp server,而是继续发送申请192.168.1.3的Request。由此就陷入了一个死循环,使得dhcp client无法获得新的ip地址
(2)测试工具
工具名字:SVlanFrame.exe
5 漏洞攻击
局域网内的任何一个主机都可以冒充dhcp server,回应某个dhcp client的discovery报文,从而篡改该dhcp client的网关地址、DNS服务器地址等。
如下局域网内有一个路由器(192.168.1.1),和两个LAN PC,其中PC2冒充dhcp server篡改了PC1的网关地址。
6 自测问答题
问题:
1 为什么wireshark工具分析dhcp协议的时候,过滤的关键字是dhcp吗?
2 为什么执行完ipconfig /release之后,客户端的IP地址变成了169.254.60.156?
3 dhcp中是如何确定IP是否被占用的?
4 客户端的request中的ip是如何确定的?
5 广播单播的问题?
答案:
1 因为dhcp的前身就是bootp
2 在rfc5735中有对这个地址的介绍
169.254.0.0/16 - This is the "link local" block. As described in
[RFC3927], it is allocated for communication between hosts on a
single link. Hosts obtain these addresses by auto-configuration,
such as when a DHCP server cannot be found.
3 有两种方式:服务器端IP租赁管理和ARP查询
4 有两种方式:来自之前服务器端发出的Offer报文中的yiaddr和来自客户端以前连接的历史IP值
5 广播和单播是根据如下自动取得的,为1表示广播,为0表示单播