有没有一种方法可以将tshark输出添加到wx.ListCtrl中?

时间:2018-12-26 04:54:28

标签: python

目前,我正在使用可分析PCAP文件的GUI。我是Python / wxPython的初学者,所以我非常感谢您的友好帮助!

我正在使用tshark读取我的PCAP文件和用于GUI的wxPython4.0.1。 tshark读取的输出存储在subprocess.popen()中。从现在开始,我打算通过GUI中的ListCtrl来显示输出,以使输出更具组织性和可读性。有没有一种方法可以将tshark输出添加到ListCtrl中?

这是我代码的主要部分:

import wx
import os
from subprocess import Popen, PIPE
import sys

class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame.__init__
        kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.SetSize((965, 600))
        self.panel_1 = wx.Panel(self, wx.ID_ANY)
        self.list_ctrl_1 = wx.ListCtrl(self.panel_1, wx.ID_ANY, style=wx.LC_HRULES | wx.LC_REPORT | wx.LC_SINGLE_SEL | wx.LC_VRULES)

        # Menu Bar
        self.frame_menubar = wx.MenuBar()
        wxglade_tmp_menu = wx.Menu()
        item = wxglade_tmp_menu.Append(wx.ID_ANY, "Upload PCAP", "")
        self.Bind(wx.EVT_MENU, self.on_menu_upload, id=item.GetId())
        self.frame_menubar.Append(wxglade_tmp_menu, "File")
        self.SetMenuBar(self.frame_menubar)
        # Menu Bar end

        self.__set_properties()
        self.__do_layout()

        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MyFrame.__set_properties
        self.SetTitle("Analysis")
        self.list_ctrl_1.AppendColumn("Time", format=wx.LIST_FORMAT_LEFT, width=193)
        self.list_ctrl_1.AppendColumn("#", format=wx.LIST_FORMAT_LEFT, width=185)
        self.list_ctrl_1.AppendColumn("Source", format=wx.LIST_FORMAT_LEFT, width=193)
        self.list_ctrl_1.AppendColumn("Destination", format=wx.LIST_FORMAT_LEFT, width=193)
        self.list_ctrl_1.AppendColumn("Protocol", format=wx.LIST_FORMAT_LEFT, width=193)
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MyFrame.__do_layout
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_2 = wx.BoxSizer(wx.VERTICAL)
        sizer_2.Add(self.list_ctrl_1, 1, wx.EXPAND, 0)
        sizer_2.Add((0, 0), 0, 0, 0)
        self.panel_1.SetSizer(sizer_2)
        sizer_1.Add(self.panel_1, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_1)
        self.Layout()
        # end wxGlade

    def on_menu_upload(self, event):  # wxGlade: MyFrame.<event_handler>
            openFileDialog = wx.FileDialog(self, "Open", "", "","*.pcap",     #creates a filedialog that only allow user to select .pcap files 
                                        wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)

            if openFileDialog.ShowModal() == wx.ID_OK:
                  evidencePath = openFileDialog.GetPath()                         #get path of selected dd file
                  filename = os.path.basename(evidencePath)
                  cmd = ['tshark', '-r', filename]
                  process = Popen(cmd, stdout=PIPE, stderr=PIPE)
                  stdout, stderr = process.communicate()
                  """self.list_ctrl_1.InsertStringItem(stdout)"""  #insert the output into the ListCtrl

                  print("PCAP Uploaded")

            else: 
                  print("Error Occurred!")

# end of class MyFrame

0 个答案:

没有答案