#!/usr/bin/env python import sys import os sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'python')) import dpkt import json from cStringIO import StringIO from inform import InformSerializer def go_debug(filename): arr = lambda x: [ord(i) for i in x] packet = ser.parse(open('test_files/2.bin')) return { "magic": packet.magic_number, "version": packet.version, "mac": arr(packet.mac_addr), "flags": packet.flags, "iv": arr(packet.iv), "data_version": packet.data_version, "data_len": packet.data_length, "raw_payload": json.packet.raw_payload, "formatted_mac": packet.formatted_mac_addr, "is_enc": packet.is_encrypted, "is_comp": packet.is_compressed, } def collect_records(from_file): records = [] buffer = StringIO() for ts, buf in dpkt.pcap.Reader(open(from_file)): eth = dpkt.ethernet.Ethernet(buf) data = eth.data.tcp.data.split("\r\n")[-1] if data.startswith("TNBU") and buffer.tell() != 0: records.append(buffer.getvalue()) buffer.seek(0) buffer.write(data) else: buffer.write(data) return records def make_serializer(from_file): with open(from_file) as fp: keystore = {i['mac']: i['x_authkey'] for i in json.load(fp)} return InformSerializer("", keystore) if __name__ == "__main__": import glob ser = make_serializer("data/devices.json") for file in glob.glob("data/test_files/*.bin"): fn, ext = os.path.splitext(file) path = os.path.dirname(fn) fn = os.path.basename(fn) with open(file) as fin, open(os.path.join(path, fn + ".txt"), 'w') as fout: json.dump(json.loads(ser.parse(fin).raw_payload), fout, sort_keys=True, indent=4, separators=(',', ': ')) # for i, data in enumerate(collect_records("mfi.out")): # try: # packet = ser.parse(StringIO(data)) # print packet.raw_payload # except ValueError: # pass