經過這樣的測試就會發現,有些感覺很便宜的網卡或是Router很偷懶,都不做什麼驗證,感覺隨便就可以通過了。底下就列出一些我的心得,給要自己寫DHCP Client/Server或是想研究一下封包的人參考:
【MAC層】
- Destination MAC = Boradcast(FF:FF:FF:FF:FF:FF),Source MAC設為自己
- 要能發ARP Reply包:不設定不知有無影響,因為待測物會定期發ARP Request來詢問MAC,即使先前有先發過ARP讓其辨認。
【IP層】
- ID不用理會:設為0就可以。
- 計算IP Checksum:一定要算,不算或是錯的可能連網卡都過不了。
- Destination IP = 255.255.255.255
【UDP層】
- 計算UDP Checksum:有些DUT不看Checksum,有些看,所以建議還是計算。我都用ip checksum的算法,把UDP包加上DIP/SIP/UDP Protocol/UDP Length一起算,不用新產生pseudo header了。
【DHCP層】
- Message Type:Request=1,Reply=2。但有些DUT甚至不看,意思是Reply包設定為1,也可以過。建議還是照規則走。
- Flags設為0:看Spec建議是說Client端因為不知自己IP,所以用Broadcast,但設不設都可以過。
- Transaction ID要相同:同樣一群DHCP包,設定為相同,所以我收到後回彈的包都直接套用不改。至於第一個discover包,就用亂數給。
- Next Server IP可加可不加:不會影響結果
【DHCP層-必要的Options設定】
- Option 53 - DHCP Message Type:Discover=1/Offer=2/Request=3/ACK=5/NAK=6。
- Option 54 - DHCP Server ID:用在reply封包,值為Server IP。
- Option 55 - Parameter Request:Client端像Server端要求回應的包要夾帶的Option參數,其實Server不完全回應也沒差。
- Option 61 - Client ID:用途是識別唯一的Client端,因此通常是Client端的MAC
- Option 1 - Subnet:主要讓Client端可以填Mask,算基本欄位,沒有的話不確定是否可行。
- Option 3 - Router:Router IP。基本上和Server IP同
- Option 6 - Domain Name Server:設定DNS IP的意思,有些Server會和Client IP一樣
- Option 255 - End:結束時一定要附上
DHCP說起來,還真有點麻煩哩!
0 意見:
張貼留言