I'm writing a program that analyzes DHCP packets, and came across option 43 (Vendor Specific Information). This is more of a programming question, and less technically related to networking and DHCP, therefore I tagged it as just python.
According to RFC 2132 (page 19), the structure of option 43 is as follows:
 Code   Len   Data item        Code   Len   Data item       Code
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|  T1 |  n  |  d1 |  d2 | ... |  T2 |  n  |  D1 |  D2 | ... | ... |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
When translated to a python 'bytes' object, it should look something like this:
[T1, n, d1, d2, ..., T2, n, D1, D2, ...]
Where n is the length of the data item (Dn).
Ideally, I want to iterate over this bytes object and save the code for each data item as a key, and map it to the appropriate data item value. IE:
{T1: [d1, d2, d3], T2: [D1, D2, D3]}
For example this:
[0, 1, 2, 1, 2, 5, 6, 3, 4, 9, 10, 11, 12]
Should translate to this:
{0: [2], 1: [5,6], 3: [9, 10, 11, 12]}
Is there a correct way to do this in python?
EDIT: Also, yes. Codes (Tn) are unique.
Use a recursive function:
trans_dict = {}
def translate(lst, trans_dict):
    if(len(lst) == 0):
        return
    else:   
        trans_dict[lst[0]] = lst[2:(2+lst[1])]        # the first element will be the key, 
                                                      # the value starts from the third 
                                                      # element with length of the second element
        translate(lst[(2+lst[1]):], trans_dict)
translate(lst, trans_dict)
trans_dict
# {0: [2], 1: [5, 6], 3: [9, 10, 11, 12]}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With