Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 15 Jul 2010 18:12:26 GMT
From:      Gabriel Silva <gsilva@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 181011 for review
Message-ID:  <201007151812.o6FICQ8u086302@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
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__":



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201007151812.o6FICQ8u086302>