PERFORCE change 181011 for review
Gabriel Silva
gsilva at FreeBSD.org
Thu Jul 15 18:12:26 UTC 2010
http://p4web.freebsd.org/@@181011?ac=10
Change 181011 by gsilva at 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__":
More information about the p4-projects
mailing list