summaryrefslogtreecommitdiff
path: root/external/construct/formats/data/cap.py
diff options
context:
space:
mode:
authorLivio Recchia <recchialivio@libero.it>2020-02-10 23:06:34 +0100
committerLivio Recchia <recchialivio@libero.it>2020-02-10 23:06:34 +0100
commit9a13903a2f7d3a65fdf15a65fb59cccd622e2066 (patch)
tree9403b7dff39eb5e5d7fa0f79efb69b496add4c4b /external/construct/formats/data/cap.py
parent11cc316b74d5f3f283413a33e7693b314741aa4a (diff)
downloadmanachat-9a13903a2f7d3a65fdf15a65fb59cccd622e2066.tar.gz
manachat-9a13903a2f7d3a65fdf15a65fb59cccd622e2066.tar.bz2
manachat-9a13903a2f7d3a65fdf15a65fb59cccd622e2066.tar.xz
manachat-9a13903a2f7d3a65fdf15a65fb59cccd622e2066.zip
Initial commit
Diffstat (limited to 'external/construct/formats/data/cap.py')
-rw-r--r--external/construct/formats/data/cap.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/external/construct/formats/data/cap.py b/external/construct/formats/data/cap.py
new file mode 100644
index 0000000..f95c5c1
--- /dev/null
+++ b/external/construct/formats/data/cap.py
@@ -0,0 +1,55 @@
+"""
+tcpdump capture file
+"""
+from construct import *
+import time
+from datetime import datetime
+
+
+class MicrosecAdapter(Adapter):
+ def _decode(self, obj, context):
+ return datetime.fromtimestamp(obj[0] + (obj[1] / 1000000.0))
+ def _encode(self, obj, context):
+ offset = time.mktime(*obj.timetuple())
+ sec = int(offset)
+ usec = (offset - sec) * 1000000
+ return (sec, usec)
+
+packet = Struct("packet",
+ MicrosecAdapter(
+ Sequence("time",
+ ULInt32("time"),
+ ULInt32("usec"),
+ )
+ ),
+ ULInt32("length"),
+ Padding(4),
+ HexDumpAdapter(Field("data", lambda ctx: ctx.length)),
+)
+
+cap_file = Struct("cap_file",
+ Padding(24),
+ Rename("packets", OptionalGreedyRange(packet)),
+)
+
+
+if __name__ == "__main__":
+ obj = cap_file.parse_stream(open("../../tests/cap2.cap", "rb"))
+ print(len(obj.packets))
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+