Example #1
0
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')
Example #2
0
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])]
Example #3
0
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')
Example #4
0
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')
Example #5
0
    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')
    
        
Example #6
0
# 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))
Example #7
0
def packageData(data):
    """ Takes in a data string and appends the CRC to it
    """
    crc = frame.generateFCS(data)

    return data + crc
Example #8
0
            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')