?DHCP(Dynamic Host Configuration Protocol,動態主機配置協議),前身是BOOTP協議,是壹個局域網的網絡協議,使用UDP協議工作,統壹使用兩個IANA分配的端口:67(服務器端),68(客戶端)。主要作用是集中的管理、分配IP地址,使client動態的獲得IP地址、Gateway地址、DNS服務器地址等信息。
option字段
?DHCP報文中的Options字段可以用來存放普通協議中沒有定義的控制信息和參數。如果用戶在DHCP服務器端配置了Options字段,DHCP客戶端在申請IP地址的時候,會通過服務器端回應的DHCP報文獲得Options字段中的配置信息。
獲取IP地址過程
?實驗使用的linux 主機由兩個網絡接口,其中ens33使用DHCP獲取IP地址,ens37使用靜態IP地址;因此需要使用ens33來發送數據包。
?Change_MAC.py用於MAC地址與Bytes類型相互轉換。
?DHCP_Discover.py用於發送DHCP Discover報文;其中GET_MAC.py見ARP章節。
?DHCP_Request.py用於發送DHCP Request報文。
?DHCP_FULL.py用於完成DHCP Client與DHCP Server的報文交互
Wireshark對遠程linux主機抓包,結果如下
客戶端以廣播發送DHCP Discover包,其中報文操作類型為1(請求報文),DHCP客戶端的MAC地址設置為00:0c:29:03:a1:08,option53設置報文類型為Discover,option55(請求選項列表)中包含請求的參數。
服務器以單播向客戶端回復信息,其中報文操作類型為2(應答報文),分配給客戶端的IP為192.168.160.146,option 53設置報文類型為offer,Option 54設置服務器標識為192.168.160.254,其他option為客戶端請求列表的應答。
值得註意的是,交互的四個報文中Transaction ID均為0x00000000,表明是同壹次DHCP交互報文。