1252190Srpaulo#!/usr/bin/env python 2252190Srpaulo# 3252190Srpaulo# Copyright (c) 2012, Intel Corporation 4252190Srpaulo# 5252190Srpaulo# Author: Johannes Berg <johannes@sipsolutions.net> 6252190Srpaulo# 7252190Srpaulo# This software may be distributed under the terms of the BSD license. 8252190Srpaulo# See README for more details. 9252190Srpaulo 10252190Srpauloimport sys, struct, re 11252190Srpaulo 12252190Srpaulodef write_pcap_header(pcap_file): 13252190Srpaulo pcap_file.write( 14252190Srpaulo struct.pack('<IHHIIII', 15252190Srpaulo 0xa1b2c3d4, 2, 4, 0, 0, 65535, 16252190Srpaulo 105 # raw 802.11 format 17252190Srpaulo )) 18252190Srpaulo 19252190Srpaulodef pcap_addpacket(pcap_file, ts, data): 20252190Srpaulo # ts in seconds, float 21252190Srpaulo pcap_file.write(struct.pack('<IIII', 22252190Srpaulo int(ts), int(1000000 * ts) % 1000000, 23252190Srpaulo len(data), len(data))) 24252190Srpaulo pcap_file.write(data) 25252190Srpaulo 26252190Srpauloif __name__ == "__main__": 27252190Srpaulo try: 28252190Srpaulo input = sys.argv[1] 29252190Srpaulo pcap = sys.argv[2] 30252190Srpaulo except IndexError: 31346981Scy print("Usage: %s <log file> <pcap file>" % sys.argv[0]) 32252190Srpaulo sys.exit(2) 33252190Srpaulo 34252190Srpaulo input_file = open(input, 'r') 35252190Srpaulo pcap_file = open(pcap, 'w') 36252190Srpaulo frame_re = re.compile(r'(([0-9]+.[0-9]{6}):\s*)?nl80211: MLME event frame - hexdump\(len=[0-9]*\):((\s*[0-9a-fA-F]{2})*)') 37252190Srpaulo 38252190Srpaulo write_pcap_header(pcap_file) 39252190Srpaulo 40252190Srpaulo for line in input_file: 41252190Srpaulo m = frame_re.match(line) 42252190Srpaulo if m is None: 43252190Srpaulo continue 44252190Srpaulo if m.group(2): 45252190Srpaulo ts = float(m.group(2)) 46252190Srpaulo else: 47252190Srpaulo ts = 0 48252190Srpaulo hexdata = m.group(3) 49252190Srpaulo hexdata = hexdata.split() 50252190Srpaulo data = ''.join([chr(int(x, 16)) for x in hexdata]) 51252190Srpaulo pcap_addpacket(pcap_file, ts, data) 52252190Srpaulo 53252190Srpaulo input_file.close() 54252190Srpaulo pcap_file.close() 55