@@ -228,7 +228,7 @@ def send_dhcp_message(self, state, time_elapsed):
228
228
# Send DHCP packet
229
229
self ._sock .send (_BUFF )
230
230
231
- def parse_dhcp_response (self , response_timeout ):
231
+ def parse_dhcp_response (self , response_timeout ): # pylint: disable=too-many-branches, too-many-statements
232
232
"""Parse DHCP response from DHCP server.
233
233
Returns DHCP packet type.
234
234
@@ -243,107 +243,77 @@ def parse_dhcp_response(self, response_timeout):
243
243
time .sleep (0.05 )
244
244
# store packet in buffer
245
245
_BUFF = self ._sock .recv ()
246
- # _BUFF = b'\x02\x01\x06\x00\x00\x00\x05\x0e\x00\x00\x80\x00\x00\x00\x00\x00\n\x00\x010\x00\x00\x00\x00\x00\x00\x00\x00\xde\xad\xbe\xef\xfe\xed\xed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00c\x82Sc5\x01\x056\x04\n\x00\x01\x013\x04\x00\x00\xa8\xc0\x01\x04\xff\xff\xff\x00\x03\x04\n\x00\x01\x01\x06\x04\n\x00\x01\x01\x0f\x10fios-router.home:\x04\x00\x00T`;\x04\x00\x00\x93\xa8\xff'
247
246
if self ._debug :
248
247
print ("DHCP Response: " , _BUFF )
249
248
250
- # Check OP, if valid, let's parse the packet out!
249
+ # -- Parse Packet, FIXED -- #
250
+ # Validate OP
251
251
assert _BUFF [0 ] == DHCP_BOOT_REPLY , "Malformed Packet - \
252
252
DHCP message OP is not expected BOOT Reply."
253
253
254
- # Parse out FIXED portion of DHCP packet
255
- op = _BUFF [0 ]
256
- htype = _BUFF [1 ]
257
- hlen = _BUFF [2 ]
258
- hops = _BUFF [3 ]
259
254
xid = _BUFF [4 :8 ]
260
- if bytes (_BUFF [4 :8 ]) < self ._initial_xid :
261
- print ("yes" )
262
- #return 0, 0
255
+ if bytes (xid ) < self ._initial_xid :
256
+ return 0 , 0
263
257
264
-
265
- secs = _BUFF [8 :10 ]
266
- flags = _BUFF [10 :12 ]
267
- ciaddr = _BUFF [12 :16 ]
268
-
269
- self .local_ip = _BUFF [16 :20 ]
270
- self .gateway_ip = _BUFF [24 :28 ]
271
- yiaddr = _BUFF [16 :20 ]
272
- siaddr = _BUFF [20 :24 ]
273
- giaddr = _BUFF [24 :28 ]
258
+ self .local_ip = _BUFF [16 :20 ]
274
259
if _BUFF [28 :34 ] == 0 :
275
- print ("no" )
276
- #return 0, 0
260
+ return 0 , 0
277
261
278
262
if int .from_bytes (_BUFF [235 :240 ], 'l' ) != MAGIC_COOKIE :
279
- print ("NO!" )
280
- #return 0, 0
281
-
263
+ return 0 , 0
282
264
283
- # Parse out VARIABLE options
284
- print ('Remaining Option Len: ' , len (_BUFF [240 :]))
285
- print (_BUFF [240 :])
265
+ # -- Parse Packet, VARIABLE -- #
286
266
ptr = 240
287
267
buff_remaining = len (_BUFF [240 :])
288
268
while buff_remaining > 0 :
289
- print ("reading.." , ptr )
290
- print ('byte: ' , _BUFF [ptr ])
291
269
if _BUFF [ptr ] == MSG_TYPE :
292
270
ptr += 1
293
271
opt_len = _BUFF [ptr ]
294
272
ptr += opt_len
295
273
msg_type = _BUFF [ptr ]
296
274
ptr += 1
297
- print ("MSG TYPE: " , msg_type )
298
275
elif _BUFF [ptr ] == SUBNET_MASK :
299
276
ptr += 1
300
277
opt_len = _BUFF [ptr ]
301
278
ptr += 1
302
279
self .subnet_mask = _BUFF [ptr :ptr + opt_len ]
303
280
ptr += opt_len
304
- print ("SUBNET MASK: " , self .subnet_mask )
305
281
elif _BUFF [ptr ] == DHCP_SERVER_ID :
306
282
ptr += 1
307
283
opt_len = _BUFF [ptr ]
308
284
ptr += 1
309
285
self .dhcp_server_ip = _BUFF [ptr :ptr + opt_len ]
310
286
ptr += opt_len
311
- print ("DHCP SERVER ID: " , self .dhcp_server_ip )
312
287
elif _BUFF [ptr ] == LEASE_TIME :
313
288
ptr += 1
314
289
opt_len = _BUFF [ptr ]
315
290
ptr += 1
316
- self ._lease_time = int .from_bytes (_BUFF [ptr :ptr + opt_len ], 'l' )
291
+ self ._lease_time = int .from_bytes (_BUFF [ptr :ptr + opt_len ], 'l' )
317
292
ptr += opt_len
318
- print ("Lease Time: " , self ._lease_time )
319
293
elif _BUFF [ptr ] == ROUTERS_ON_SUBNET :
320
294
ptr += 1
321
295
opt_len = _BUFF [ptr ]
322
296
ptr += 1
323
- gateway_ip = _BUFF [ptr :ptr + opt_len ]
297
+ self . gateway_ip = _BUFF [ptr :ptr + opt_len ]
324
298
ptr += opt_len
325
- print ("gateway_ip: " , gateway_ip )
326
299
elif _BUFF [ptr ] == DNS_SERVERS :
327
300
ptr += 2 # move past length
328
301
# NOTE: we're only using the first DNS server
329
302
opt_len = _BUFF [ptr ]
330
303
self .dns_server_ip = _BUFF [ptr :ptr + 4 ]
331
304
ptr += opt_len # still increment even though we only read 1 addr.
332
- print ("dns_server: " , self .dns_server_ip )
333
305
elif _BUFF [ptr ] == T1_VAL :
334
306
ptr += 1
335
307
opt_len = _BUFF [ptr ]
336
308
ptr += 1
337
309
self ._t1 = int .from_bytes (_BUFF [ptr :ptr + opt_len ], 'l' )
338
310
ptr += opt_len
339
- print ("t1: " , self ._t1 )
340
311
elif _BUFF [ptr ] == T2_VAL :
341
312
ptr += 1
342
313
opt_len = _BUFF [ptr ]
343
314
ptr += 1
344
315
self ._t2 = int .from_bytes (_BUFF [ptr :ptr + opt_len ], 'l' )
345
316
ptr += opt_len
346
- print ("t2: " , self ._t2 )
347
317
elif _BUFF [ptr ] == OPT_END :
348
318
break
349
319
else :
@@ -354,12 +324,11 @@ def parse_dhcp_response(self, response_timeout):
354
324
# no-op
355
325
ptr += opt_len
356
326
buff_remaining = ptr - buff_remaining
357
- print ('remaining: ' , buff_remaining )
358
327
359
328
gc .collect ()
360
329
return msg_type , xid
361
330
362
- def request_dhcp_lease (self ):
331
+ def request_dhcp_lease (self ): # pylint: disable=too-many-branches
363
332
"""Request to renew or acquire a DHCP lease.
364
333
365
334
"""
0 commit comments