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')