def genframe(fid, data, adulterate = False): crc = frame.generateFCS(data) outdata = data + crc l = len(outdata) if len(outdata) % 2 == 1: outdata += "\xFF" if adulterate: # corrupt the frame outdata = outdata[:2] + '\x17' + outdata[3:] fid.write("1 ") else: fid.write("0 ") fid.write("%d " % l) fid.write("%4.4X " % l) for i in range((l+1) / 2): d1 = struct.unpack('B', outdata[2*i])[0] d2 = struct.unpack('B', outdata[2*i+1])[0] fid.write("%2.2X%2.2X " % (d1, d2)) fid.write('\n')
def generateCRC(data): """ Takes in data and appends the crc """ # create the string: d = "" for i in data: d += chr(i) fcs = frame.generateFCS(d) return [ord(fcs[0]), ord(fcs[1]), ord(fcs[2]), ord(fcs[3])]
def writePacketsToFile(pktlist, ofile, update = True, fcsappend = False): """ take a list of packet bytes and writes them to the indicated file """ # segment packet strings into lists of bytes for da in pktlist: # now we have the output packets in numerical form; perform the update # of the ip sequence and then the relevant header checksum update if update: da[19] = 0 da[20] = 0 # zero udp chksum da[40] = 0 da[41] = 0 updateIPHeader(da) # generate fcs if fcsappend: dastr = "".join([chr(x) for x in da]) crc = frame.generateFCS(dastr) da = n.resize(da, len(da)+4) da[-4] = ord(crc[0]) da[-3] = ord(crc[1]) da[-2] = ord(crc[2]) da[-1] = ord(crc[3]) # now we print our normal format ofile.write("%d " % (len(da)/2 + 1)) ofile.write("%4.4X " % (len(da))) for i in range(len(da) / 2): ofile.write("%2.2X%2.2X " % (da[i*2], da[i*2+1])) ofile.write('\n')
def genframe(data, prespace = 5, extracrap = 0): """ write the string data to the files as a frame, appending the proper length data and computing the crc """ # write as input for i in range(prespace): dinfid.write("0 0000\n") l = len(data) dinfid.write("1 %4.4X\n" % l) din = data + '\x00' for i in range((l+1)/2): dinfid.write("1 %2.2X%2.2X\n" % (ord(din[i*2]), ord(din[i*2+1]))) for i in range(extracrap): dinfid.write("1 0000\n") dinfid.write("0 0000\n") # write as output crc = frame.generateFCS(data) outdata = data + crc lo = len(outdata) doutfid.write("%d " % lo) doutfid.write("%4.4X " % lo) dout = outdata + '\x00' for i in range((lo + 1)/2): doutfid.write('%2.2X%2.2X ' % (ord(dout[i*2]), ord(dout[i*2+1]))) doutfid.write('\n')
bytestr = ''.join(s.split(' ')) N = len(bytestr) da = n.zeros(N/2, n.uint8) for i in range(N/2): wordstr = bytestr[i*2:(i+1)*2] #print wordstr, len(wordstr), i, N, N/4 da[i] = int(wordstr, 16) # now we have the output packets in numerical form; perform the update # of the ip sequence and then the relevant header checksum update dastr = "".join([chr(x) for x in da]) crc = frame.generateFCS(dastr) da = n.resize(da, len(da)+4) da[-4] = ord(crc[0]) da[-3] = ord(crc[1]) da[-2] = ord(crc[2]) da[-1] = ord(crc[3]) # now we print our normal format ofile.write("%d " % (len(da)/2 + 1)) ofile.write("%4.4X " % len(da)) for i in range(len(da) / 2): ofile.write("%2.2X%2.2X " % (da[i*2], da[i*2+1])) ofile.write('\n')
# read in as a string lenword = fid.readline() l = int(lenword, 16) print l data = "" for i in range((l+1)/2 ): dw = fid.readline() data += chr(int(dw[:2], 16)) data += chr(int(dw[2:], 16)) if l % 2 == 1: data = data[:-1] crc = frame.generateFCS(data) totaldata = data + crc # write valid packet fid = file(filename + ".crc", 'w') fid.write("%4.4X\n" % len(totaldata)) outdata = totaldata + '\x00' for i in range(len(totaldata) / 2): fid.write("%2.2X%2.2X\n" % (ord(outdata[2*i]), ord(outdata[2*i+1]))) # write corrupt packet fid = file(filename + ".crcerror", 'w') fid.write("%4.4X\n" % len(totaldata))
def packageData(data): """ Takes in a data string and appends the CRC to it """ crc = frame.generateFCS(data) return data + crc
bytestr = l[6:53] octetsraw = bytestr.split(' ') octets = [x for x in octetsraw if x != ''] alloctets += octets l = fid.readline() updateIPHeader(alloctets) # add on the crc, but only if it's a req, not a resp if "req" in outfilename: # generate string framestr = "".join([chr(int(x, 16)) for x in alloctets]) crcstr = frame.generateFCS(framestr) alloctets.append("%2.2X" % ord(crcstr[0])) alloctets.append("%2.2X" % ord(crcstr[1])) alloctets.append("%2.2X" % ord(crcstr[2])) alloctets.append("%2.2X" % ord(crcstr[3])) framelen = len(alloctets) ofid.write("%4.4X\n" % (int(framelen))) for i in range(framelen/2): ofid.write(alloctets[i*2] + alloctets[i*2+1] + '\n' ) if framelen % 2 == 1: ofid.write(alloctets[-1] + '00' + '\n')