diff --git a/scapy/layers/bluetooth.py b/scapy/layers/bluetooth.py index cb845062ceaeedcf4991de46c4b35b10cf60c38a..234dbcc9ab1307bec37982943963b19aede0cfd8 100644 --- a/scapy/layers/bluetooth.py +++ b/scapy/layers/bluetooth.py @@ -71,8 +71,7 @@ class HCI_ACL_Hdr(Packet): def post_build(self, p, pay): p += pay if self.len is None: - l = len(p)-4 - p = p[:2]+chr(l&0xff)+chr((l>>8)&0xff)+p[4:] + p = p[:2] + struct.pack("<H", len(pay)) + p[4:] return p @@ -84,8 +83,7 @@ class L2CAP_Hdr(Packet): def post_build(self, p, pay): p += pay if self.len is None: - l = len(pay) - p = chr(l&0xff)+chr((l>>8)&0xff)+p[2:] + p = struct.pack("<H", len(pay)) + p[2:] return p @@ -103,8 +101,7 @@ class L2CAP_CmdHdr(Packet): def post_build(self, p, pay): p += pay if self.len is None: - l = len(p)-4 - p = p[:2]+chr(l&0xff)+chr((l>>8)&0xff)+p[4:] + p = p[:2] + struct.pack("<H", len(pay)) + p[4:] return p def answers(self, other): if other.id == self.id: @@ -464,8 +461,7 @@ class HCI_Command_Hdr(Packet): def post_build(self, p, pay): p += pay if self.len is None: - l = len(p)-3 - p = p[:2]+chr(l&0xff)+p[3:] + p = p[:2] + struct.pack("B", len(pay)) + p[3:] return p class HCI_Cmd_Reset(Packet): diff --git a/test/bluetooth.uts b/test/bluetooth.uts index 3ac5acad9852770ac17fd65ea7d51c2f827a7d44..253c26e5553d94918aaddb97ce0d3a5c6489c572 100644 --- a/test/bluetooth.uts +++ b/test/bluetooth.uts @@ -3,18 +3,18 @@ + HCI Commands = LE Create Connection Cancel -expected_cmd_raw_data = "010e2000".decode('hex') -cmd_raw_data = str(HCI_Hdr() / HCI_Command_Hdr() / HCI_Cmd_LE_Create_Connection_Cancel()) +expected_cmd_raw_data = hex_bytes("010e2000") +cmd_raw_data = raw(HCI_Hdr() / HCI_Command_Hdr() / HCI_Cmd_LE_Create_Connection_Cancel()) assert(expected_cmd_raw_data == cmd_raw_data) = Disconnect -expected_cmd_raw_data = "01060403341213".decode('hex') -cmd_raw_data = str(HCI_Hdr() / HCI_Command_Hdr() / HCI_Cmd_Disconnect(handle=0x1234)) +expected_cmd_raw_data = hex_bytes("01060403341213") +cmd_raw_data = raw(HCI_Hdr() / HCI_Command_Hdr() / HCI_Cmd_Disconnect(handle=0x1234)) assert(expected_cmd_raw_data == cmd_raw_data) = LE Connection Update Command -expected_cmd_raw_data = "0113200e47000a00140001003c000100ffff".decode('hex') -cmd_raw_data = str( +expected_cmd_raw_data = hex_bytes("0113200e47000a00140001003c000100ffff") +cmd_raw_data = raw( HCI_Hdr() / HCI_Command_Hdr() / HCI_Cmd_LE_Connection_Update( handle=0x47, min_interval=10, max_interval=20, latency=1, timeout=60, min_ce=1, max_ce=0xffff)) @@ -23,7 +23,7 @@ assert(expected_cmd_raw_data == cmd_raw_data) + HCI Events = LE Connection Update Event -evt_raw_data = "043e0a03004800140001003c00".decode('hex') +evt_raw_data = hex_bytes("043e0a03004800140001003c00") evt_pkt = HCI_Hdr(evt_raw_data) assert(evt_pkt[HCI_LE_Meta_Connection_Update_Complete].handle == 0x48) assert(evt_pkt[HCI_LE_Meta_Connection_Update_Complete].interval == 20) @@ -35,20 +35,20 @@ assert(evt_pkt[HCI_LE_Meta_Connection_Update_Complete].timeout == 60) = Parse EIR_Flags, EIR_CompleteList16BitServiceUUIDs, EIR_CompleteLocalName and EIR_TX_Power_Level ad_report_raw_data = \ - "043e2b020100016522c00181781f0201020303d9fe1409" \ - "506562626c652054696d65204c452037314536020a0cde".decode('hex') + hex_bytes("043e2b020100016522c00181781f0201020303d9fe1409" \ + "506562626c652054696d65204c452037314536020a0cde") scapy_packet = HCI_Hdr(ad_report_raw_data) assert(scapy_packet[EIR_Flags].flags == 0x02) assert(scapy_packet[EIR_CompleteList16BitServiceUUIDs].svc_uuids == [0xfed9]) -assert(scapy_packet[EIR_CompleteLocalName].local_name == 'Pebble Time LE 71E6') +assert(scapy_packet[EIR_CompleteLocalName].local_name == b'Pebble Time LE 71E6') assert(scapy_packet[EIR_TX_Power_Level].level == 12) = Parse EIR_Manufacturer_Specific_Data scan_resp_raw_data = \ - "043e2302010401be5e0eb9f04f1716ff5401005f423331" \ - "3134374432343631fc00030c0000de".decode('hex') + hex_bytes("043e2302010401be5e0eb9f04f1716ff5401005f423331" \ + "3134374432343631fc00030c0000de") scapy_packet = HCI_Hdr(scan_resp_raw_data) assert(scapy_packet[EIR_Manufacturer_Specific_Data].data == b'\x00_B31147D2461\xfc\x00\x03\x0c\x00\x00')