Add simple wifi packet decoding to web applet.
diff --git a/app.py b/app.py
index 9f5cd7c..1649113 100644
--- a/app.py
+++ b/app.py
@@ -11,9 +11,12 @@
import tornado.template
from google.appengine.ext import blobstore
from google.appengine.ext.webapp import blobstore_handlers
+import wifipacket
+
loader = tornado.template.Loader('.')
+
class _BaseHandler(webapp2.RequestHandler):
def render(self, template, **kwargs):
d = dict()
@@ -40,12 +43,8 @@
blobres = str(urllib.unquote(blobres))
blob_info = blobstore.BlobInfo.get(blobres)
reader = blob_info.open()
- total = 0
- while 1:
- d = reader.read(1024*1024)
- total += len(d)
- if not d: break
- self.render('view.html', blob=blob_info, total=total)
+ packets = wifipacket.Packetize(reader)
+ self.render('view.html', blob=blob_info, packets=packets)
settings = dict(
diff --git a/view.html b/view.html
index 458f4f5..068275c 100644
--- a/view.html
+++ b/view.html
@@ -7,5 +7,8 @@
filename: {{blob.filename}}<p>
size: {{blob.size}}<p>
- total: {{total}}<p>
+
+ {% for p, frame in packets %}
+ {{p.get('ta')}}<br>
+ {% end %}
{% end %}
diff --git a/wifipacket.py b/wifipacket.py
index 1961242..57ffb37 100755
--- a/wifipacket.py
+++ b/wifipacket.py
@@ -250,6 +250,7 @@
# pcap packet data
radiotap = stream.read(incl_len)
+ if len(radiotap) < incl_len: break # EOF
opt.incl_len = incl_len
opt.orig_len = orig_len
@@ -308,11 +309,13 @@
ofs = 4
for i, fieldname in enumerate(typefields):
if fieldname == 'seq':
+ if len(frame) < ofs + 2: break
seq = struct.unpack('<H', frame[ofs:ofs + 2])[0]
opt.seq = (seq & 0xfff0) >> 4
opt.frag = (seq & 0x000f)
ofs += 2
else:
+ if len(frame) < ofs + 6: break
opt[fieldname] = MacAddr(frame[ofs:ofs + 6])
ofs += 6