check in checkinator into hswaw/checkinator
repository: https://code.hackerspace.pl/checkinator
revision: 713c7e6c1a8fd6147522c1a5e3067898a1d8bf7a
Change-Id: I1bd2975a46ec0d9a89d6594fb4b9d49832001627
Reviewed-on: https://gerrit.hackerspace.pl/c/hscloud/+/1219
Reviewed-by: q3k <q3k@hackerspace.pl>
diff --git a/hswaw/checkinator/cap.py b/hswaw/checkinator/cap.py
new file mode 100644
index 0000000..7651e6c
--- /dev/null
+++ b/hswaw/checkinator/cap.py
@@ -0,0 +1,30 @@
+import logging
+import pcapy
+import struct
+
+interface = 'wlan0'
+target = './dhcp-cap'
+logger = logging.getLogger()
+logger.setLevel(logging.DEBUG)
+logger.addHandler(logging.StreamHandler())
+
+def hwaddr_ascii(packet):
+ # picking up MAC directly from ethernet frame
+ return ':'.join('%02x' % ord(c) for c in packet[6:12])
+
+def capture_dhcp(itf):
+ f = open(target, 'w')
+ reader = pcapy.open_live(itf, 4096, False, 5000)
+ reader.setfilter('udp dst port 67')
+ def callback(header, packet):
+ hwaddr = hwaddr_ascii(packet)
+ logger.info('Captured dhcp request from %s', hwaddr)
+ f.write(hwaddr + '\n')
+ f.flush()
+ try:
+ while True:
+ reader.dispatch(1, callback)
+ except KeyboardInterrupt:
+ pass
+
+capture_dhcp('wlan0')