Пример #1
0
    def __init__(self):
        MainWindow.__init__(self)
        
        self.pktList = PktList()
        
        self.capturer = Capturer(self.pktList)
        self.cap_thread = None
        self.analyzer = Analyer(self.pktList, self.pktTableWidget, self)
        self.ana_thread = None
        
        MainWindow.set_devlist(self, self.capturer.devlist, WIN32)
#        self.testWidget()
        self.show()
Пример #2
0
class QSniffer(MainWindow):
    def __init__(self):
        MainWindow.__init__(self)
        
        self.pktList = PktList()
        
        self.capturer = Capturer(self.pktList)
        self.cap_thread = None
        self.analyzer = Analyer(self.pktList, self.pktTableWidget, self)
        self.ana_thread = None
        
        MainWindow.set_devlist(self, self.capturer.devlist, WIN32)
#        self.testWidget()
        self.show()
    
    @pyqtSignature("int")
    def on_promisCheckBox_stateChanged(self, p0):
        MainWindow.on_promisCheckBox_stateChanged(self, p0)
#        print "check int:%d"%p0
        if(self.promisCheckBox.isChecked()):
            self.capturer.set_promisc(True)
        else:
            self.capturer.set_promisc(False)
    
    @pyqtSignature("")
    def on_startButton_clicked(self):
        MainWindow.on_startButton_clicked(self)
        if self.capturer.adhandle == None:
            curindex = self.devComboBox.currentIndex()
            if not self.capturer.open_dev(curindex):
#                TODO: handle open error
                return
        self.cap_thread = threading.Thread(target=self.capturer.start_capture)
        self.cap_thread.start()
        self.ana_thread = threading.Thread(target=self.analyzer.start_analize)
        self.ana_thread.start()
    
    @pyqtSignature("")
    def on_stopButton_clicked(self):
        MainWindow.on_stopButton_clicked(self)
        if self.cap_thread != None and self.cap_thread.is_alive():
            self.capturer.stop_capture()
            self.cap_thread.join()
        if self.ana_thread != None and self.ana_thread.is_alive():
            self.analyzer.stop_analize()
            self.ana_thread.join()
    
    @pyqtSignature("")
    def on_clearButton_clicked(self):
        MainWindow.on_clearButton_clicked(self)
        if self.cap_thread == None or self.ana_thread == None:
            pass
        elif self.cap_thread.is_alive() or self.ana_thread.is_alive():
            if self.capturer.pktSrcType == 'dev':
                QtGui.QMessageBox.information(self, "Information", 
                                              self.tr("You must stop capture first."))
                return False
            elif self.capturer.pktSrcType == 'dump':
                self.on_stopButton_clicked()
        
        self.capturer.clear()
        self.analyzer.clear()
        self.pktList.clear()
        
        count = self.pktTableWidget.rowCount()
        for i in range(count):
            self.pktTableWidget.removeRow(0)
        self.pktTreeWidget.clear()
        self.pktAsciiBrowser.clear()
        self.pkt0xBrowser.clear()
        return True
    
    @pyqtSignature("")
    def on_exportButton_clicked(self):
        MainWindow.on_exportButton_clicked(self)
        if self.cap_thread == None or self.ana_thread == None:
            pass
        elif self.cap_thread.is_alive() or self.ana_thread.is_alive():
            if self.capturer.pktSrcType == 'dev':
                QtGui.QMessageBox.information(self, "Information", 
                                              self.tr("You must stop capture first."))
                return False
            elif self.capturer.pktSrcType == 'dump':
                self.on_stopButton_clicked()
        
        fdialog = QtGui.QFileDialog()
        fdialog.setWindowTitle('Save pcap file')
        fname = fdialog.getSaveFileName(filter='pcap file(*.pcap)', directory='/')
        fname = unicode(fname)
        if str(fname) == '':
            return False
        if os.path.exists('~tmp'):
            shutil.move('~tmp', fname)
        return True
    
    @pyqtSignature("")
    def on_importButton_clicked(self):
        MainWindow.on_importButton_clicked(self)
        if not self.on_clearButton_clicked():
            return False
        
        fdialog = QtGui.QFileDialog()
        fdialog.setWindowTitle('Select pcap file')
        fname = fdialog.getOpenFileName(directory='/')
        fname = unicode(fname)
#        print "file name:%r" % fname
        
        if fname == '':
            return 
        if not self.capturer.open_dump(fname):
            return
        self.cap_thread = threading.Thread(target=self.capturer.start_capture)
        self.cap_thread.start()
        self.ana_thread = threading.Thread(target=self.analyzer.start_analize)
        self.ana_thread.start()
        
    @pyqtSignature("")
    def on_filterApplyButton_clicked(self):
        MainWindow.on_filterApplyButton_clicked(self)
        if self.capturer.adhandle == None:
            curindex = self.devComboBox.currentIndex()
            if not self.capturer.open_dev(curindex):
                return
        filterstr = str(self.filterLineEdit.text())
#        print "%r" % filterstr
        if filterstr == "":
            return 
        msg = self.filterMsgLable
        if self.capturer.compile_filter(filterstr):
            if self.capturer.set_filter():
                msg.setText(QtCore.QString("<font style='color: green;'>Success</font>"))
            else:
                msg.setText(QtCore.QString("<font style='color: red;'>Error occur</font>"))
        else:
            msg.setText(QtCore.QString("<font style='color: red;'>Wrong syntax</font>"))
    
    @pyqtSignature("")
    def on_filterClearButton_clicked(self):
        MainWindow.on_filterClearButton_clicked(self)
        self.filterLineEdit.clear()
    
    @pyqtSignature("QString")
    def on_filterLineEdit_textChanged(self, p0):
        MainWindow.on_filterLineEdit_textChanged(self, p0)
        self.filterMsgLable.clear()
    
    @pyqtSignature("int")
    def on_devComboBox_currentIndexChanged(self, index):
        MainWindow.on_devComboBox_currentIndexChanged(self, index)
        self.analyzer.statistics.updateStatistics(self)
#        print "combobox index:%d" % index
        
    @pyqtSignature("int, int")
    def on_pktTableWidget_cellClicked(self, row, column):
        MainWindow.on_pktTableWidget_cellClicked(self, row, column)
        tree = self.pktTreeWidget
        tree.clear()
        pktItem = self.analyzer.itemlist[row]
        pktdata = pktItem.rawpkt[1]
        
        pTree = ProtocolTree(tree, pktdata)
        tree.insertTopLevelItems(0, pTree.parseProtocol())
        p0xb = self.pkt0xBrowser
        p0xb.setText(QtCore.QString(PktContent.pkt0xContent(pktdata)))
        pasciib = self.pktAsciiBrowser
        pasciib.setText(QtCore.QString(PktContent.pktAsciiContent(pktdata)))
    
    def closeEvent(self, *args, **kwargs):
        if os.path.exists('./~tmp'):
            os.remove('./~tmp')
        self.on_stopButton_clicked()
        return MainWindow.closeEvent(self, *args, **kwargs)