PERFORCE change 181007 for review

Gabriel Silva gsilva at FreeBSD.org
Thu Jul 15 17:01:08 UTC 2010


http://p4web.freebsd.org/@@181007?ac=10

Change 181007 by gsilva at gsilva on 2010/07/15 17:01:00

	Added generate_frame() and send_frame() methods.
	Added methods to generate integers, strings and 802.11 valid addresses.

Affected files ...

.. //depot/projects/soc2010/gsilva_80211fuzz/src/tools/tools/net80211/80211fuzz/fuzzer.py#2 edit

Differences ...

==== //depot/projects/soc2010/gsilva_80211fuzz/src/tools/tools/net80211/80211fuzz/fuzzer.py#2 (text+ko) ====

@@ -2,8 +2,10 @@
 # 802.11 Fuzzer
 #
 
-import pcs
+import string
+import random
 
+from pcs import *
 from pcs.packets import radiotap
 from pcs.packets import ieee80211
 from optparse import OptionParser
@@ -14,13 +16,61 @@
         self.channel = channel
         self. state = state
         self.type = type
-        
+        self.frame_number = 0
+
+        self.output = PcapConnector(self.interface, wireless = True)
+
+    def generate_int(self, bits):
+        return random.getrandbits(bits)
+
+    def generate_string(self, size, restrict_chars = None):
+        if restrict_chars:
+            string = "".join(random.sample(restrict_chars, size))
+        else:
+            string = "".join(random.sample(string.digits + string.ascii_lowercase, size))
+
+        return string
+
+    def generate_addr(self):
+        addr = self.generate_string(2, string.hexdigits[:16])
+
+        for i in range(0,5):
+            addr += ":"
+            addr += self.generate_string(2, string.hexdigits[:16])
+
+        return ieee80211.ieee80211_atob(addr)
+
+    def generate_frame(self):
+        radio = radiotap.radiotap()
+        radio.version = 0;
+        radio.pad = 0;
+        radio.length = 0;
+
+        frame = ieee80211.frame()
+        frame.fc0 = self.generate_int(8);
+        frame.fc1 = self.generate_int(8);
+        frame.dur = self.generate_int(16);
+        frame.addr1 = self.generate_addr();
+        frame.addr2 = self.generate_addr();
+        frame.addr3 = self.generate_addr();
+        frame.seq = self.generate_int(16);
+
+        chain = Chain([radio, frame])
+
+        return chain
+
+    def send_frame(self, frame):
+        out = self.output.write(frame.bytes, len(frame.bytes))
+        self.frame_number += 1
+        print "Frame %d was sent." % self.frame_number 
+
     def start(self):
         print "Starting a state %d fuzzing on interface %s, channel %s" % (self.state, self.interface, self.channel)
         print "Press CTRL+C to stop.\n"
 
         while 1:
-            1
+            frame = self.generate_frame();
+            self.send_frame(frame);
 
 
 def main():


More information about the p4-projects mailing list