## This file is part of Scapy ## See http://www.secdev.org/projects/scapy for more informations ## Copyright (C) Philippe Biondi ## Copyright (C) Mike Ryan ## This program is published under a GPLv2 license """ Bluetooth layers, sockets and send/receive functions. """ import socket,struct,array from ctypes import * from select import select from scapy.config import conf from scapy.data import DLT_BLUETOOTH_HCI_H4 from scapy.packet import * from scapy.fields import * from scapy.supersocket import SuperSocket from scapy.sendrecv import sndrcv from scapy.data import MTU from scapy.consts import WINDOWS from scapy.error import warning, log_loading ########## # Fields # ########## class XLEShortField(LEShortField): def i2repr(self, pkt, x): return lhex(self.i2h(pkt, x)) class XLELongField(LEShortField): def __init__(self, name, default): Field.__init__(self, name, default, "> 12) return struct.pack("!H", r) + s[2:] def post_dissect(self, s): self.raw_packet_cache = None # Reset packet to allow post_build return s def post_build(self, p, pay): p += pay if self.len is None: p = p[:2] + struct.pack("> 4)) return struct.pack("!H", r) + p[2:] class L2CAP_Hdr(Packet): name = "L2CAP header" fields_desc = [ LEShortField("len",None), LEShortEnumField("cid",0,{1:"control", 4:"attribute"}),] def post_build(self, p, pay): p += pay if self.len is None: p = struct.pack(" 0 def flush(self): while self.readable(): self.recv() conf.BTsocket = BluetoothRFCommSocket ## Bluetooth @conf.commands.register def srbt(bt_address, pkts, inter=0.1, *args, **kargs): """send and receive using a bluetooth socket""" if "port" in kargs.keys(): s = conf.BTsocket(bt_address=bt_address, port=kargs.pop("port")) else: s = conf.BTsocket(bt_address=bt_address) a,b = sndrcv(s,pkts,inter=inter,*args,**kargs) s.close() return a,b @conf.commands.register def srbt1(bt_address, pkts, *args, **kargs): """send and receive 1 packet using a bluetooth socket""" a,b = srbt(bt_address, pkts, *args, **kargs) if len(a) > 0: return a[0][1]