📄 np_tcpdisplay.py
字号:
#! /usr/bin/env python################################################################################ ## 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 ## ################################################################################################################################################################ #### ## #### ############################################################################ from Tkinter import *import Numericimport osfrom tempfile import mktempimport stringfrom minmax import MIN, MAXfrom nprobe import SERVER, CLIENTfrom np_TCP_Window import TCP_Window, TCP_canv, TCP_WDW_HT, TCP_WDW_WIfrom np_longutil import Longstringfrom np_packet_markers import *from np_TCP import TCP_Machine, TCPNoModel, TCPModelPkts, \ TCPModelNoTrans, trig_strfrom TCP_Imp import TCP_Impsfrom np_atypes import Atypefrom np_widgets import PCan, PListB, BarButton, XSCROLL, YSCROLL, XYSCROLLimport np_grabrec#from np_grabrec import grab#from print_col import whoops########################################################################################################################################################ROOT_WI = 600#ROOT_WI = 500ROOT_HI = 750#ROOT_HI = 500ROOT_WDW_TOOLBAR_HT = 25ROOT_XPOS = 25ROOT_YPOS = 25#ROOT_YPOS = 0#DISPLAY_XPOS = 500DISPLAY_XPOS = ROOT_XPOS + ROOT_WI +10# where to place the windowsRootGeom = '%dx%d+%d+%d' % (ROOT_WI, ROOT_HI, ROOT_XPOS,ROOT_YPOS)DisplayGeom = '%dx%d+%d+%d' % (TCP_WDW_WI, TCP_WDW_HT, DISPLAY_XPOS, ROOT_YPOS)#RootGeom = '%dx%d' % (ROOT_WI, ROOT_HI)#DisplayGeom = '%dx%d' % (TCP_WDW_WI, TCP_WDW_HT)######################################################################################################################################################### display - externally scoped pointer needed for set Imp callbacksdisplay = None########################################################################################################################################################class TcpDisplay: def __init__(self, connlist, standalone='no', path='', logfun=None, trace=0): if not len(connlist): print 'TCP_Display: empty connection list' return if standalone == 'yes': self.root = Tk() else: self.root = Toplevel() self.root.geometry(RootGeom) self.root.minsize(200, 200) self.display = Tcp_Disp(connlist, standalone=standalone, master=self.root, path=path, logfun=logfun, trace=trace) if standalone == 'yes': self.root.mainloop() else: self.root.wait_window(self.root)########################################################################################################################################################class Tcp_Disp(Frame): def __init__(self, connlist, standalone, master = None, path='.', logfun=None, trace=0, **cnf): apply(Frame.__init__, (self, master), cnf) self.configure(width=ROOT_WI, height=ROOT_HI) self.pack(expand=1, fill=BOTH) self.master = master self.trace = trace # Set up the TCP implementations self.TCP_imps = TCP_Imps() #print self.TCP_imps # create a toolbar toolbar = self.toolbar = Frame(self) toolbar.configure(bg='grey') toolbar.pack(side=TOP, fill=X) if len(connlist) > 1: # prev button toolbar.prevb = Button(toolbar, text="Prev", width=6, command=self.draw_prev_conn) toolbar.prevb.configure(bg='grey', fg='black') toolbar.prevb.pack(side=LEFT, padx=2) toolbar.prevb.config(state=DISABLED) # next button toolbar.nextb = Button(toolbar, text="Next", width=6, command=self.draw_next_conn) toolbar.nextb.configure(bg='grey', fg='black') toolbar.nextb.pack(side=LEFT, padx=2) # TCP implementations menu self.make_impmenu(toolbar) # Show pkts/transactions self.show_what = StringVar() toolbar.show_whatb = swb = BarButton(self.toolbar, text='Show', bg='gray', relief=RAISED, padx=2).menu swb.add_radiobutton(label='Pkts', command=self.show_what_fun, variable=self.show_what, value='Pkts', indicatoron=0, selectcolor='blue') swb.add_radiobutton(label='Trans', command=self.show_what_fun, variable=self.show_what, value='Trans', indicatoron=0, selectcolor='blue') swb.add_radiobutton(label='Both', command=self.show_what_fun, variable=self.show_what, value='Both', indicatoron=0, selectcolor='blue') self.show_what.set('Trans') # quit button if standalone == 'yes': quitfun = self.finish else: quitfun = self._destroy toolbar.quitb = Button(toolbar, text="Quit", width=6, command=quitfun) toolbar.quitb.configure(bg='grey', fg='red') toolbar.quitb.pack(side=RIGHT, padx=2) # print button toolbar.printb = Button(toolbar, text="Print", width=6, command=self.print_conn) toolbar.printb.configure(bg='grey', fg='black') toolbar.printb.pack(side=RIGHT, padx=25) # grab button toolbar.grabb = Button(self.toolbar, text="grab", width=5, command=self.grab) toolbar.grabb.configure(bg='grey') toolbar.grabb.pack(side=LEFT, padx=2) # Pkt info display self.canv = ConnPktInfo(self, ROOT_HI-ROOT_WDW_TOOLBAR_HT) # Conn/pkt info display self.lb = ConnTransInfo(self) self.lb.pack(side=TOP, fill=BOTH, expand=1) self.transdata = None self.connlist = connlist self.conn_indx = 0 self.path = path # where the rep file is self.logfun = logfun # to write any logged stuff self.display = None self.draw_next_conn() # Draw the first conn############################################################################ def finish(self): #print 'Finish called' sys.exit(0)############################################################################ def _destroy(self): if self.display: self.display.destroy() del(self.display) self.master.destroy()############################################################################ def grab(self): #print self.clist[self.indx].FileRec #np_grabrec.grab(self.curr_conn.FileRec) np_grabrec.grab(self.curr_conn)############################################################################ def show_what_fun(self): show_what = self.show_what.get() show_pkts = (show_what == 'Pkts') or (show_what == 'Both') show_trans = (show_what == 'Trans') or (show_what == 'Both') self.canv.pack_forget() self.lb.pack_forget() if show_pkts: self.canv.pack(side=TOP, fill=BOTH, expand=1) if show_trans: self.lb.pack(side=TOP, fill=BOTH, expand=1) elif not show_pkts: self.canv.pack(side=TOP, fill=BOTH, expand=1) self.show_pkts.set(1) ############################################################################ def message(self, str): canv = self.canv canv.delete(ALL) canv.create_text(5, 5, fill='white', anchor=NW, text=str, font=("helvetica", 8)) ############################################################################ def set_titlebar(self, conn): tstr = 'Packet list for connection #%d' % (conn.id) self.winfo_toplevel().title(tstr) ############################################################################ def draw_next_conn(self): if len(self.connlist) > 1 and self.conn_indx >= len(self.connlist): self.message('All connections drawn') self.toolbar.nextb.config(state=DISABLED) return #print len(self.connlist) #print self.connlist self.curr_conn = conn = self.connlist[self.conn_indx] self.set_titlebar(conn) if self.display != None: #not the first self.display.clear_canvasses() self.toolbar.prevb.config(state=NORMAL) #conn.make_clusters() if self.trace or 1: self.canv.list_pkts(conn, 1) self.lb.transdata = None self.lb.list_trans(conn) self.TCP_imps.set_start() conn.logfun = self.logfun conn.model(self.TCP_imps, None) if self.trace: if conn.modelled: extend = 'true' else: extend = 'false' self.canv.list_pkts(conn, 1, extend=extend) if self.display != None: #not the first self.display.draw_conn(conn) else: self.display = TCP_Window(conn, self, self) self.display.geometry(DisplayGeom) self.conn_indx = self.conn_indx + 1############################################################################ def draw_prev_conn(self): if self.conn_indx < 2: self.toolbar.prevb.config(state=DISABLED) #self.message('First connection shown') return self.conn_indx = self.conn_indx - 2 self.curr_conn = conn = self.connlist[self.conn_indx] self.set_titlebar(conn) self.display.clear_canvasses() if conn.modelled: self.display.draw_conn(conn) self.set_titlebar(conn) self.canv.list_pkts(conn, conn.modelled, extend=conn.modelled) self.lb.transdata = None self.lb.list_trans(conn) self.toolbar.nextb.config(state=NORMAL) self.conn_indx = self.conn_indx + 1############################################################################ def re_draw(self): self.clear() conn = self.curr_conn t = TCP_Machine(conn, self.TCP_imps, self.logfun, trace=self.trace) try: simp, cimp = t.do_pkts() conn.modelled = 1 self.add_imps(simp, cimp) self.display.draw_conn(conn) except TCPNoModel: pass ############################################################################ def print_conn(self): cm = [0.0, 0.0, 0.0, 'green']## canv = self.display.canvasses[self.display.canvas_curr].canv## canv.postscript(file='./foo') conn = self.curr_conn if not conn.modelled: return indx1 = self.display.canvasses[self.display.canvas_curr].indx1 indx2 = self.display.canvasses[self.display.canvas_curr].indx2 connstr = '#%d' % (conn.id) if indx1 != 0 or indx2 != len(conn.pktlist)-1: indxstr = '.%d-%d' % (indx1, indx2) else: indxstr = '' suffstr = '.ps' path = self.path + connstr + indxstr + suffstr d = TCP_canv(self.display, conn, conn.pktlist, indx1, indx2, 550, 800, 0, 0, bgcol='white', fgcol='black') d.canv.postscript(file=path, width=600, height=900, colormode='color', colormap=cm,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -