⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 np_file_util.py

📁 该软件根据网络数据生成NetFlow记录。NetFlow可用于网络规划、负载均衡、安全监控等
💻 PY
字号:
################################################################################                                                                             ##   Copyright 2005 University of Cambridge Computer Laboratory.               ##                                                                             ##   This file is part of Nprobe.                                              ##                                                                             ##   Nprobe is free software; you can redistribute it and/or modify            ##   it under the terms of the GNU General Public License as published by      ##   the Free Software Foundation; either version 2 of the License, or         ##   (at your option) any later version.                                       ##                                                                             ##   Nprobe is distributed in the hope that it will be useful,                 ##   but WITHOUT ANY WARRANTY; without even the implied warranty of            ##   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             ##   GNU General Public License for more details.                              ##                                                                             ##   You should have received a copy of the GNU General Public License         ##   along with Nprobe; if not, write to the Free Software                     ##   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA ##                                                                             ################################################################################## Some basic utility functions for manipulating Nprobe logs and generic records#import stringimport globimport osimport sysfrom sys import argvfrom nprobe import np_file, counters############################################################################class EOF_REACHED:    def __init__(self, file):	self.file = file############################################################################### Compare two Nprobe us_clocks # - return 1 if first later, -1 if first earlier, 0 if same#def cmp_us_clk(a, b):	if a.us_high > b.us_high:		return 1	elif a.us_high < b.us_high:		return -1	else:		if a.us_low > b.us_low:			return 1		elif a.us_low < b.us_low:			return -1		else:			return 0	#############################################################################		#check sorted list of rep files is contiguousdef contig(l):	tup = l[0]	first = tup[1]	for i in range(1, len(l)):		tup = l[i]		second = tup[1]		if first + 1 != second:			print "# WARNING -  rep file discontinuity ",			print tup[0]			first = second			second = second + 1			#sys.exit(1)		else:			first = second############################################################################# #sort cmp function for list of rep filesdef cmp_fileseq(a, b):	if a[1] > b[1]:		return 1	elif a[1] < b[1]:		return -1	else:		return -1		print "ERROR - identical sequence numbers ",		print a[0] + " " + b[0]		sys.exit(1)################################################################################ given a directory or file(s) create a list of rep file names representing # a continuous nprobe run - validate for type and continuity, # aggregate per - file counters.# return (file name list, aggregated counters)#def get_files(args):    # Possible channel prefixes    chan_pref = 'AB'        # Build list of files given in args    dirname = ""    filerange = ""    filename = ""    rawfilelist = []    for name in args:	#print name	if os.path.isdir(name):	    #print "is a dir"	    dirlist =[]	    print "# Files from " + name	    dirname = name	    #print dirname	    for dname in os.listdir(name):		#print dname		rawfilelist.append(os.path.join(name, dname))			else:	    rawfilelist.append(name)    #print rawfilelist    # Build list of the rep files    filenamelist = []## Old channel naming scheme ##    for name in rawfilelist:## 	if len(name) >= 12 and name[-10:-4] == "].rep." and name[-12] == "[":## 	    repnum = string.atoi(name[-4:])## 	    filenamelist.append((name, repnum))     ## New channel naming scheme       for name in rawfilelist:        	if len(name) >= 10 and name[-9:-4] == ".rep." and chan_pref.count(name[-10]):	    repnum = string.atoi(name[-4:])	    filenamelist.append((name, repnum))    if not len(filenamelist):        nrf = len(rawfilelist)        if nrf == 0:            print 'No Nprobe rep file specified in c.l.'            sys.exit(1)        elif nrf == 1:            print '%s is not an Nprobe rep file' % (rawfilelist[0])            sys.exit(1)        else:            print 'No Nprobe rep files found amongst'            for f in rawfilelist:                print '\t%s' % (f)            sys.exit(1)                # Check contiguous cycles    filenamelist.sort(cmp_fileseq)    contig(filenamelist)    #print filenamelist    # Display files    llen = len(filenamelist)    if llen == 0:	print "No files"    elif len(filenamelist) == 1:	name = filenamelist[0]	#filename = os.path.split(name[0])[1]	filename = name[0]	#print filename	print "# File ", os.path.split(name[0])[1]    else:	if not len(dirname):	    dirname = os.path.split(filenamelist[0][0])[0]	    filerange = os.path.split(filenamelist[0][0])[1]+"-"+os.path.split(filenamelist[llen - 1][0])[1]	#print filerange	print "# Files:", os.path.split(filenamelist[0][0])[1], " - ", os.path.split(filenamelist[llen - 1][0])[1] 	print    # Open files and build list    openfilelist = []    for name in filenamelist:	a = np_file(name[0], 0)	openfilelist.append(a)    print "\n"    # Accumulate counters over all cycles    overallcounters = counters()    for file in openfilelist:	overallcounters.addin(file.counters)	 ##    for openfile in openfilelist:## 	#openfile.printhdr()## 	#openfile.printcounters()	## 	overallcounters.addin(openfile.counters)    # Calculate base path for saved files    if len(dirname) and not len(filerange):	basepath = dirname + "/"    elif len(filerange):	if len(dirname):	    basepath = dirname + "/" + filerange + "."	else:	    basepath = filerange + "."    else:	    basepath = filename + "."    if basepath[-2:] == '//':        basepath = basepath[:-1]    elif basepath[-3:] == '/./':        basepath = basepath[:-2]    # Return list of open files and acuumulated counters    return (openfilelist, overallcounters, basepath)##############################################################################		# print entire tconn recorddef print_conn_all(connrec, translist):    connrec.printself()    for trans in translist:	trans.printself(connrec)		return############################################################################## Return type of next record - leave file position to read it# as nprobe.next_rec but raises EOF_REACHEDdef next_rec(file):    res = file.next_rec()    if res == -1:	raise EOF_REACHED(file)    else:	return res############################################################################## Seek to next record of specified type - return typedef next_type_rec(file, type):    #print file.indx    res = file.next_type_rec(type)    if res == -1:	raise EOF_REACHED(file)    else:	return res############################################################################### Execute this on load to avoid nasty version bugs (and unsupported stuff)#V = string.split(string.split(sys.version)[0], '.')if int(V[0]) < 2:    print 'Interpreter is Python %s.%s\n ... Sorry must use 2.0 or above' \          % (V[0], V[1])

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -