众所周知,无论是在局域网或者公网里上网都需要IP地址作为识别符,那么一台终端接入到一个网络中一般不需要自己配置IP地址,这是因为在插上网线的一瞬间,终端已经替用户完成获取IP的一系列操作(前提网络中有DHCP服务器)。俗话说,实验是验证真理的唯一标准,接下来就来抓包验证一下~
客户机终端获取IP地址需要与服务器交互,共四个包:
客户机发送DHCP DISCOVERY包,此包为广播包,在网络中去寻找DHCP服务器,带有自己的MAC地址服务器响应DHCP OFFER包,此包为单播发送,回馈给发出请求的客户机,带有可以使用的IP地址客户机发送DHCP REQUEST包,客户机中意这个IP地址,则会发出请求去获取详细参数,比如说网关、子网掩码、dns等等服务器返回DHCP ACK包,提供详细的配置信息并确定租约ps: 如果网络中有多台DHCP服务器,客户机在发出DISCOVERY包后,将会选择最先得到的那个OFFER包提供的IP地址~
客户机续约DHCP有三种情况:
当客户机使用的IP地址租约过了一半时,客户机会发送REQUEST包请求续约,得到服务器续约成功的ACK包确认后,会把之前剩下的一半租期覆盖。说人话就是,假如第一次获取租约为一天,当过了半天,就会请求续约,续约成功后,IP地址的失效时间仍为一天,而不是一天半~但当租约过了一半时,客户机发送续约请求未被服务器响应,客户机则继续使用,当租约达到87.5%时,再次去请求续约,如果还得不到响应,直接释放IP地址(客户机:什么服务态度,不用你了!!),再去寻求新的DHCP服务器~如果网络中没有发现DHCP服务器,客户端将自动分配169.254.0.0/16地址,目的为了维持局域网通信~首先我们打开使用的抓包软件Wireshark,开启侦听网卡之后,设置下过滤器
ip.addr==192.168.1.1 || bootparams //过滤和dhcp服务器的交互包,并且同时过滤dhcp协议包然后我们可以使用管理员打开cmd
ipconfig /release //释放IP地址释放IP地址的同时,会抓到下图两个包 第一个包是客户机发送给服务器的RELEASE包,用来释放IP地址。在网络中,所有设备都有义务反馈信息,例如报错信息或提示信息,使用ICMP协议。第二个包就是信息反馈,由于目标地址已经释放,所以显示为目标不可达~ 接下来开始获取IP地址
ipconfig /renew //获取IP地址这时候查看抓到的包
从图中可以看出,首先是四个包的请求的过程,而且会发现获取IP地址后,自动发送了4个ICMP包验证~ 有细心的会发现OFFER包和ACK包的目标地址怎么已经是192.168.1.105了,这是因为服务器那里应该有缓存的原因,如果清理了缓存,这两个包的目标地址为广播地址,但实质上它是通过MAC地址找到客户机的。 上图是其中ACK包的应用层数据信息,感兴趣的可以自己动手研究一下~
谈到DHCP的攻击和防御,一般发生在企业中,个人家庭小局域网一般不会被攻击,也不排除吃饱没事干的人~ 最常见的攻击无非两种,伪装客户机和伪装服务器:
客户机攻击: 在一个局域网中,一台攻击者PC频繁的发送伪装的DHCP请求,其中包含的MAC地址肯定是伪装的啦,不然服务器会分配和之前相同的地址~就这样一直发送,直到IP地址消耗殆尽,新接入此局域网的终端则会获取不到IP地址,无法上网 防御: 在交换机上的端口做动态MAC地址绑定,这样每个端口只能匹配一个IP地址,就不会存在资源耗尽的情况了~当然是企业中管理型交换机才有的功能服务器攻击: 伪装DHCP服务器攻击,攻击者将在此局域网部署DHCP服务器,为客户机提供非法IP地址,这种方法成功率一半左右,因为客户机选择OFFER包的前提是先到先得~ 防御: 在交换机上,除了合法的DHCP服务器所连接的端口之外,任何端口不允许发送DHCP OFFER包,当然也是管理型交换机才有的功能~The end~~