From owner-p4-projects@FreeBSD.ORG Thu Jul 15 18:12:26 2010 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id B0B701065676; Thu, 15 Jul 2010 18:12:26 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5CC8D106564A for ; Thu, 15 Jul 2010 18:12:26 +0000 (UTC) (envelope-from gsilva@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 4A1468FC14 for ; Thu, 15 Jul 2010 18:12:26 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id o6FICQLu086304 for ; Thu, 15 Jul 2010 18:12:26 GMT (envelope-from gsilva@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id o6FICQ8u086302 for perforce@freebsd.org; Thu, 15 Jul 2010 18:12:26 GMT (envelope-from gsilva@FreeBSD.org) Date: Thu, 15 Jul 2010 18:12:26 GMT Message-Id: <201007151812.o6FICQ8u086302@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to gsilva@FreeBSD.org using -f From: Gabriel Silva To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 181011 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Jul 2010 18:12:26 -0000 http://p4web.freebsd.org/@@181011?ac=10 Change 181011 by gsilva@gsilva on 2010/07/15 18:11:58 Added support to dump the injected frames to a file on pcap format. Added docstring comments. Affected files ... .. //depot/projects/soc2010/gsilva_80211fuzz/src/tools/tools/net80211/80211fuzz/fuzzer.py#3 edit Differences ... ==== //depot/projects/soc2010/gsilva_80211fuzz/src/tools/tools/net80211/80211fuzz/fuzzer.py#3 (text+ko) ==== @@ -5,25 +5,44 @@ import string import random +from time import strftime + from pcs import * from pcs.packets import radiotap from pcs.packets import ieee80211 from optparse import OptionParser class Fuzzer: - def __init__(self, interface, channel, state, type): + """ + The main fuzzer class + """ + + def __init__(self, interface, channel, state, type, dump): + """initialize the fuzzer""" self.interface = interface self.channel = channel self. state = state self.type = type self.frame_number = 0 + self.dump = dump self.output = PcapConnector(self.interface, wireless = True) + if self.dump: + self.dumpfile = self.generate_dump_filename() + self.output_dump = PcapDumpConnector(self.dumpfile) + + def generate_dump_filename(self): + """generate a dump filename based on current time""" + filename = strftime("%Y-%m-%d_%H-%M-%S") + ".dump" + return filename + def generate_int(self, bits): + """generate an integer with given size""" return random.getrandbits(bits) def generate_string(self, size, restrict_chars = None): + """generate a string with given size and alphabet""" if restrict_chars: string = "".join(random.sample(restrict_chars, size)) else: @@ -32,6 +51,7 @@ return string def generate_addr(self): + """generate a valid 802.11 address""" addr = self.generate_string(2, string.hexdigits[:16]) for i in range(0,5): @@ -41,6 +61,7 @@ return ieee80211.ieee80211_atob(addr) def generate_frame(self): + """generate a frame to inject""" radio = radiotap.radiotap() radio.version = 0; radio.pad = 0; @@ -60,11 +81,17 @@ return chain def send_frame(self, frame): + """send a generated frame and dump if requested""" out = self.output.write(frame.bytes, len(frame.bytes)) self.frame_number += 1 + print "Frame %d was sent." % self.frame_number + if self.dump: + self.output_dump.write(frame) + def start(self): + """start the fuzzing""" print "Starting a state %d fuzzing on interface %s, channel %s" % (self.state, self.interface, self.channel) print "Press CTRL+C to stop.\n" @@ -87,13 +114,17 @@ parser.add_option("-t", "--type", dest="type", default="random", help="Which fuzzer type: random, corner-cases. [default %default]") + + parser.add_option("-d", "--dump", + dest="dump", default=False, action="store_true", + help="Dump the injected frames to a file for reproduction. [default %default]") (options, args) = parser.parse_args() if len(args) != 1: parser.error("Must provide at least the interface to inject the frames.") - fuzzer = Fuzzer(args[0], options.channel, options.state, options.type) + fuzzer = Fuzzer(args[0], options.channel, options.state, options.type, options.dump) fuzzer.start() if __name__ == "__main__":