def writer(vulns, **params): csvfile = params['fobj'] debug.write('.') for vuln in vulns: csvfile.writerow([vuln['name'], vuln['count']])
def gen_csv(sc, filename, field_list, source, filters): '''csv SecurityCenterObj, AssetListName, CSVFields, EmailAddress ''' # First thing we need to do is initialize the csvfile and build the header # for the file. datafile = open(filename, 'wb') csvfile = csv.writer(datafile) header = [] for field in field_list: header.append(fields.fields[field]['name']) csvfile.writerow(header) debug.write('Generating %s: ' % filename) # Next we will run the Security Center query. because this could be a # potentially very large dataset that is returned, we don't want to run out # of memory. To get around this, we will pass the query function the writer # function with the appropriate fields so that it is parsed inline. fparams = {'fobj': csvfile, 'flist': field_list} sc.query('vulndetails', source=source, func=writer, func_params=fparams, **filters) debug.write('\n') # Lastly we need to close the datafile. datafile.close()
def tree_search(states, goal_test, successors, combiner): """Find a state in STATES that satisfies GOAL_TEST. Start with STATES and search according to the SUCCESSOR and COMBINER functions""" debug.write("tree-search", "Searching: " + str(states).strip('[]')) if len(states) == 0: return None elif goal_test(states[0]): return states[0] else: return tree_search( combiner(successors(states[0]), states[1:]), goal_test, successors, combiner)
def readhgt(filename): debug.write("Opening %s" % (filename)) f = open(filename, "rb") hgt_string = f.read() tilesize = int(math.sqrt(len(hgt_string) / 2)) if tilesize == 1201: resolution = 3 elif tilesize == 3601: resolution = 1 else: raise Exception('Error: Can only support 3" and 1" data') debug.write(" Tile size %d Resolution %d\"" % (tilesize, resolution)) hgt_2darray = numpy.flipud(((numpy.fromstring(string=hgt_string, dtype='int16')).byteswap()).reshape(tilesize, tilesize)) return tilesize, hgt_2darray
def gen_csv(sc, filename): '''csv SecurityCenterObj, EmailAddress ''' # First thing we need to do is initialize the csvfile and build the header # for the file. datafile = open(filename, 'wb') csvfile = csv.writer(datafile) csvfile.writerow(['Software Package Name', 'Count']) debug.write('Generating %s: ' % filename) # Next we will run the Security Center query. because this could be a # potentially very large dataset that is returned, we don't want to run out # of memory. To get around this, we will pass the query function the writer # function with the appropriate fields so that it is parsed inline. fparams = {'fobj': csvfile} sc.query('listsoftware', func=writer, func_params=fparams) debug.write('\n') # Lastly we need to close the datafile. datafile.close()
def writer(vulns, **params): csvfile = params['fobj'] flist = params['flist'] debug.write('.') for vuln in vulns: # First thing before we do any parsing is we need to generate the # firstSeenDate and lastSeenDate fields into the vulnerability # dictionary. These may be requested by the field listing later on. fsd = datetime.date.fromtimestamp(int(vuln['firstSeen'])).strftime('%D') lsd = datetime.date.fromtimestamp(int(vuln['lastSeen'])).strftime('%D') vuln['firstSeenDate'] = fsd vuln['lastSeenDate'] = lsd # Next we will expand the vulnerability dictionary further thanks to the # regexes in the fields dictionary. for field in flist: if field not in vuln and 'rex' in fields.fields[field]: for rex in fields.fields[field]['rex']: res = rex.findall(vuln['pluginText']) if len(res) > 0: break if len(res) > 0: vdata = ', '.join(res) else: vdata = '' vuln[field] = vdata # Now that we have everything populated, lets go ahead and build and # then write the row to disk. row = [] for field in flist: row.append(vuln[field].replace('\\n', '\n').replace('<br/>', '\n')\ .encode('ascii', 'ignore')) csvfile.writerow(row)