+ row = [tT.time(), id_new,8] # could make this 8 a variable
+ msg = "Injecting: "
+ for i in range(5,13):
+ row.append(packet[i])
+ msg += " %d"%packet[i]
+ #print msg
+ dataWriter.writerow(row)
+ self.client.txpacket(packet)
+ tT.sleep(period/1000)
+
+ #inject the packet the given number of times.
+ for i in range(1,writesPerFuzz):
+ self.client.MCPrts(TXB0=True)
+ tT.sleep(period/1000)
+ fuzzNumber += 1
+ print "Fuzzing Complete"
+ SIDhigh = (1056 >> 3) & 0xFF; # get SID bits 10:3, rotate them to bits 7:0
+ SIDlow = (1056 & 0x07) << 5; # get SID bits 2:0, rotate them to bits 7:5
+ packet = [SIDhigh, SIDlow, 0, 0, 8, 65, 255, 32, 120, 0, 0, 1, 247]
+ self.client.txpacket(packet)
+ for i in range(0,100):
+ self.client.MCPrts(TXB0=True)
+ tT.sleep(.01)
+ outfile.close()
+
+ def generalFuzz(self,freq, Fuzzes, period, writesPerFuzz):
+ """
+ The method will inject properly formatted, randomly generated messages at a given period for a I{writesPerFuzz}
+ number of times. A new random standard id will be chosen with each newly generated packet. IDs will be chosen from the full
+ range of potential ids ranging from 0 to 4095. The packets that are injected into the bus will all be saved in the following path
+ DATALOCATION/InjectedData/(today's date (YYYYMMDD))_GenerationFuzzedPackets.csv. An example filename would be 20130222_GenerationFuzzedPackets.csv
+ Where DATALOCATION is provided when the class is initiated. The data will be saved as integers.
+ Each row will be formatted in the following form::
+ row = [time of injection, standardID, 8, db0, db1, db2, db3, db4, db5, db6, db7]
+
+ @type freq: number
+ @param freq: The frequency at which the bus is communicating
+ @type period: number
+ @param period: The time gap between packet inejctions given in milliseconds
+ @type writesPerFuzz: integer
+ @param writesPerFuzz: This will be the number of times that each randomly generated packet will be injected onto the bus
+ before a new packet is generated
+ @type Fuzzes: integer
+ @param Fuzzes: The number of packets to be generated and injected onto bus
+
+ @rtype: None
+ @return: This method does not return anything
+
+ """
+ #print "Fuzzing on standard ID: %d" %standardId
+ self.client.serInit()
+ self.spitSetup(freq)
+ packet = [0,0,0x00,0x00,0x08,0,0,0,0,0,0,0,0] #empty template
+
+ #get folder information (based on today's date)
+ now = datetime.datetime.now()
+ datestr = now.strftime("%Y%m%d")
+ path = self.DATA_LOCATION+"InjectedData/"+datestr+"_GenerationFuzzedPackets.csv"
+ filename = path
+ outfile = open(filename,'a');
+ dataWriter = csv.writer(outfile,delimiter=',');
+ #dataWriter.writerow(['# Time Error Bytes 1-13']);
+ #dataWriter.writerow(['#' + description])
+
+ fuzzNumber = 0; #: counts the number of packets we have generated
+ while( fuzzNumber < Fuzzes):
+ #generate new random standard id in the full range of possible values
+ id_new = random.randint(0,4095)
+ #print id_new
+ #### split SID into different regs
+ SIDhigh = (id_new >> 3) & 0xFF; # get SID bits 10:3, rotate them to bits 7:0
+ SIDlow = (id_new & 0x07) << 5; # get SID bits 2:0, rotate them to bits 7:5
+ packet[0] = SIDhigh
+ packet[1] = SIDlow
+
+ #generate a fuzzed packet
+ for i in range(0,8): # for each data byte, fuzz it
+ idx = "db%d"%i
+
+ value = random.randint(0, 255) #generate pseudo-random integer value
+ packet[i+5] = value
+ #print packet
+ #put a rough time stamp on the data and get all the data bytes
+ row = [time.time(), id_new,8]
+ """@todo: allow for varied packet lengths"""