Repository: fortra/impacket
Issue category: Bug Report

dhcp.py: decode error  "object has no attribute 'encode'"
### Configuration
  
impacket version:  HEAD
Python version:  3.11
Target OS:  Linux

### Debug Output With Command String  

````
		dhcp = DhcpPacket(buffer)
		print(dhcp)
``````


```
Traceback (most recent call last):
  File "/home/mdt/Source/emdete/honeypot/snooper/main.py", line 14, in learn_dhcp
    dhcp = DHCP(buffer)
           ^^^^^^^^^^^^
  File "/home/mdt/Source/oss/python/impacket/impacket/dhcp.py", line 148, in __init__
    structure.Structure.__init__(self, data, alignment)
  File "/home/mdt/Source/oss/python/impacket/impacket/structure.py", line 87, in __init__
    self.fromString(data)
  File "/home/mdt/Source/oss/python/impacket/impacket/structure.py", line 152, in fromString
    self[field[0]] = self.unpack(field[1], data[:size], dataClassOrCode = dataClassOrCode, field = field[0])
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mdt/Source/oss/python/impacket/impacket/structure.py", line 307, in unpack
    return eval(dataClassOrCode, {}, fields)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<string>", line 1, in <module>
  File "/home/mdt/Source/oss/python/impacket/impacket/dhcp.py", line 179, in unpackOptions
    value = self.unpack(format, options[i+2:i+2+size])
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mdt/Source/oss/python/impacket/impacket/structure.py", line 382, in unpack
    return dataClassOrCode(data)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/six.py", line 644, in b
    return s.encode("latin-1")
           ^^^^^^^^
AttributeError: ("'bytearray' object has no attribute 'encode'", "When unpacking field 'options | _ | b''[:0]'")
```


### PCAP  

```
 b'\x01\x01\x06\x00\xa3Y\xdf\x06\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf84A\xdb2.\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\x00\x00c\x82Sc5\x01\x032\x04\xc0\xa8\x00\x8c6\x04\xc0\xa8\x00\x019\x02\x02@7\x07\x01\x03\x06\x0c\x0f\x1c*<\x0cudhcp 1.36.1=\x07\x01\xf84A\xdb2.\xff\x00\x00\x00\x00\x00\x00\x00\x00'
```

### Additional context  





Functions to edit:
impacket/dhcp.py:DhcpPacket.unpackOptions

Patch:
diff --git a/impacket/dhcp.py b/impacket/dhcp.py
index aeabb4013..dde0c3909 100644
--- a/impacket/dhcp.py
+++ b/impacket/dhcp.py
@@ -178,7 +178,7 @@ def unpackOptions(self, options):
             # size = self.calcUnpackSize(format, options[i+1:])
             size = options[i+1]
             # print i, name, format, size
-            value = self.unpack(format, options[i+2:i+2+size])
+            value = self.unpack(format, bytes(options[i+2:i+2+size]))
             answer.append((name, value))
             i += 2+size