Newer
Older
import socketserver
from datetime import datetime
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4,
)
conn = sqlite3.connect("MUEB_register.db")
c = conn.cursor()
# create mueb table
try:
c.execute('''
CREATE TABLE mueb (
mueb_id INTEGER PRIMARY KEY,
mac STRING (17) UNIQUE
NOT NULL
);
''')
except:
pass
print("Listening for MUEB DHCP discover")
print("{:<8} {:<17} {:<5}".format("scan", "MAC", "MUEB id"))
prev_MAC = None
class UDPHandler(socketserver.BaseRequestHandler):
def handle(self):
global prev_MAC
data = self.request[0].strip()
CHADDR = list(data[28:34]) # CHWADDR
if(hex(CHADDR[0]) != '0x54' or hex(CHADDR[1]) != '0x10' or hex(CHADDR[2]) != '0xec'):
return
MAC = ':'.join(["{0:02X}".format(i) for i in CHADDR])
# handle multiple requests from the same device
# save to DB
c.execute("INSERT OR IGNORE INTO mueb(mac) VALUES('{}')".format(MAC))
conn.commit()
c.execute("SELECT mueb_id FROM mueb WHERE mac='{}'".format(MAC))
mueb_id = c.fetchall()[0][0]
print("{:<8} {:<17} {:<5}".format(
datetime.now().strftime('%H:%M:%S'), MAC, mueb_id))
qr.add_data(MAC)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
font = ImageFont.truetype("arial.ttf", 30)
w, h = font.getsize(MAC)
caption = MAC+"\n\n{}".format(str(mueb_id).center(32))
finalImg = Image.new(
'RGBA', (W+w+qr.border*qr.box_size, H), 'white')
finalImg.paste(img)
draw.text((W, (H-(qr.border*qr.box_size))/2),
caption, "black", font)
finalImg.show()
finalImg.save("{}.png".format(mueb_id))
qr.clear()
def main():
with socketserver.UDPServer(('', 67), UDPHandler) as server:
try:
server.serve_forever()
except KeyboardInterrupt:
conn.close()