Newer
Older
1
2
3
4
5
6
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import qrcode
import socket
import sqlite3
from PIL import Image, ImageDraw, ImageFont
def main():
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
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
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('', 67))
prev_MAC = None
id = 0
print("Listening for MUEB DHCP discover")
print("{:<5} {:<20} {:<5}".format("scan", "MAC", "MUEB id"))
while 1:
# wait for dhcp packet
data = s.recv(1024)
tmp = list(data[28:34])
if(hex(tmp[0]) != '0x54' or hex(tmp[1]) != '0x10' or hex(tmp[2]) != '0xec'):
continue
MAC = ':'.join(["{0:02X}".format(i) for i in list(data[28:34])])
# 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("{:<5} {:<20} {:<5}".format(id, MAC, mueb_id))
id += 1
# handle multiple requests
if prev_MAC != MAC:
qr.add_data(MAC)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
width, height = img.size
finalImg = Image.new('RGBA', (width, height), 'white')
finalImg.paste(img)
caption = MAC+"/{}".format(mueb_id)
font = ImageFont.truetype("arial.ttf", 15)
w, h = font.getsize(caption)
draw = ImageDraw.Draw(finalImg)
draw.text((round((width-w)/2), round(height-h-10)),
caption, "black", font)
finalImg.show()
finalImg.save("{}.png".format(mueb_id))
qr.clear()
prev_MAC = MAC
if __name__ == '__main__':
main()