DHCP
2020-04-24 本文已影响0人
你跺你还麻
DHCP是什么
动态主机配置协议(Dynamic Host Configuration Protocol),顾名思义就是为客户端配置一个IP地址的协议,一半工作在局域网中,采用IP广播形式,获取客户端发过来的udp报文,并为客户端分配一个IP地址,协同各个客户端进行工作。
DHCP什么样
imageDHCP报文解析
- op (Operation)区分数据报文是request包还是reply包
- htype (HardwareType)硬件类型,枚举类型
LinkTypeNull LinkType = 0
LinkTypeEthernet LinkType = 1
LinkTypeAX25 LinkType = 3
LinkTypeTokenRing LinkType = 6
LinkTypeArcNet LinkType = 7
LinkTypeSLIP LinkType = 8
LinkTypePPP LinkType = 9
LinkTypeFDDI LinkType = 10
LinkTypePPP_HDLC LinkType = 50
LinkTypePPPEthernet LinkType = 51
LinkTypeATM_RFC1483 LinkType = 100
LinkTypeRaw LinkType = 101
LinkTypeC_HDLC LinkType = 104
LinkTypeIEEE802_11 LinkType = 105
LinkTypeFRelay LinkType = 107
LinkTypeLoop LinkType = 108
LinkTypeLinuxSLL LinkType = 113
LinkTypeLTalk LinkType = 114
LinkTypePFLog LinkType = 117
LinkTypePrismHeader LinkType = 119
LinkTypeIPOverFC LinkType = 122
LinkTypeSunATM LinkType = 123
LinkTypeIEEE80211Radio LinkType = 127
LinkTypeARCNetLinux LinkType = 129
LinkTypeIPOver1394 LinkType = 138
LinkTypeMTP2Phdr LinkType = 139
LinkTypeMTP2 LinkType = 140
LinkTypeMTP3 LinkType = 141
LinkTypeSCCP LinkType = 142
LinkTypeDOCSIS LinkType = 143
LinkTypeLinuxIRDA LinkType = 144
LinkTypeLinuxLAPD LinkType = 177
LinkTypeLinuxUSB LinkType = 220
LinkTypeIPv4 LinkType = 228
LinkTypeIPv6 LinkType = 229
- hle (HardwareLen) 硬件类型长度,这里和chaddr对应,标示硬件地址长度,譬如如果是以太网(Ethernet)类型,hle为6,标示mac地址
4.hops(HardwareOpts) 若封包需经过 router 传送,每站加 1 ,若在同一网内为 0
5.xid 客户端和服务端包对应ID,类似于id相同,则属于同一对
6.secs(Secs) 客户端启动时间 - flags u16的数字标示发送包类型,左边第一位为1 标示服务端以IP广播包发送给客户端
- ciaddr 即ClientIP ,若client想要使用特定的IP可在请求数据包中,告诉服务端
- yiaddr 即YourClientIP,服务端响应客户端的请求,告知客户端可以使用的ip地址
- siaddr,服务端地址,服务端以广播的形式发送给客户端,屏蔽了服务端地址,在此客户端需要在应用包中区别不同服务端
- giaddr,即RelayAgentIP,也叫网关地址,若需跨网域进行 DHCP 发放,此栏为 relay agent 的地址,否则为 0。
- chaddr,即ClientHWAddr,客户端硬件地址,最长16字节
13.sname,即ServerName,服务器名称,最长64字节,
14.file 若 client 需要透过网络开机,此栏将指出开机程序名称,稍后以 TFTP 传送。 - Options 选项信息,其中包括,包类型之类的都在这里面,编码格式为,1字节类型,1字节长度,+数据
DHCP怎么做
- 客户端广播一个Discover包到局域网中,目的端口号为67(DHCP服务端口号)
- 服务端用68端口发送Offer包给客户端,并在offer包中标明可用IP,补充siaddr,并广播到局域网中,
3.客户端选择最先到达的offer包进行处理, 客户端广播发送Request包到局域网,此包标明客户端需要使用offer包发送的IP,并在数据包中标明要发送的serverIP地址 - server收到客户端处理包,若不是自己的则清除相应的IP分配记录,若是自己的,服务端发送Ack 包给服务端,并在数据包中指明租期信息等,通讯结束(分配IP阶段)。
- 快到期了客户端需要发送续期包到服务端,服务端刷新租期信息。
- 若客户端想要释放IP 则可以发送release包主动释放IP
抓包(非广播形式)
此处模拟的是discover和offer包
image.png
客户端发送discover包到服务端(53),并携带私有options信息(d6),下面是服务端回复情况
image.png模拟需要:
https://github.com/google/gopacket
https://github.com/insomniacslk/dhcp
具体协议可对照分析~不做过多解释了