示例#1
0
文件: Nemo.py 项目: IICT/Nemo
 def __init__(self, app, parent=None):
     super(MainWindow, self).__init__(parent)
     self.__view = MainView()
     self.__view.setupUi(self)
     emtpyPacketList = []
     self.__view.tableView.setModel(PacketList(self, emtpyPacketList))
     self.__view.tableView.resizeColumnsToContents()
     self.__view.startButton.clicked.connect(self.startCapture)
     self.__view.ipAddress.textChanged.connect(lambda : self.checkField(self.__view.ipAddress, Sniffer.CheckIP))
     self.__view.protocol.textChanged.connect(lambda : self.checkField(self.__view.protocol, Sniffer.CheckTransportProtocol))
     self.__view.port.textChanged.connect(lambda : self.checkField(self.__view.port, Sniffer.CheckPort))
     #font = self.__view.tableView.horizontalHeader().font()
     #font.setBold(True)
     #self.__view.tableView.horizontalHeader().setFont(font)
     v = self.__view.tableView.verticalHeader()
     v.setDefaultSectionSize(v.fontMetrics().height()+15)
     self.__view.tableView.resizeColumnsToContents()
     self.__view.tableView.horizontalHeader().setStretchLastSection(True)
示例#2
0
文件: Nemo.py 项目: IICT/Nemo
class MainWindow(QtGui.QMainWindow):
    def __init__(self, app, parent=None):
        super(MainWindow, self).__init__(parent)
        self.__view = MainView()
        self.__view.setupUi(self)
        emtpyPacketList = []
        self.__view.tableView.setModel(PacketList(self, emtpyPacketList))
        self.__view.tableView.resizeColumnsToContents()
        self.__view.startButton.clicked.connect(self.startCapture)
        self.__view.ipAddress.textChanged.connect(lambda : self.checkField(self.__view.ipAddress, Sniffer.CheckIP))
        self.__view.protocol.textChanged.connect(lambda : self.checkField(self.__view.protocol, Sniffer.CheckTransportProtocol))
        self.__view.port.textChanged.connect(lambda : self.checkField(self.__view.port, Sniffer.CheckPort))
        #font = self.__view.tableView.horizontalHeader().font()
        #font.setBold(True)
        #self.__view.tableView.horizontalHeader().setFont(font)
        v = self.__view.tableView.verticalHeader()
        v.setDefaultSectionSize(v.fontMetrics().height()+15)
        self.__view.tableView.resizeColumnsToContents()
        self.__view.tableView.horizontalHeader().setStretchLastSection(True)

    def checkField(self, lineEdit, check):
        content = lineEdit.text().strip()
        if not content:
            lineEdit.setStyleSheet("QLineEdit{background: white;}")
        elif not check(content):
            lineEdit.setStyleSheet("QLineEdit{background: pink;}")
        else:
            lineEdit.setStyleSheet("QLineEdit{background: lightgreen;}")

    def handleRowSelection(self, selected, deselected):
        selectedRows = self.__view.tableView.selectionModel().selectedRows()
        if selectedRows != []:
            row = selectedRows[0]
            payload = row.sibling(row.row(),7).data()
            self.__view.payload.clear()
            self.__view.payload.insertPlainText(payload)

    def enterGuiCaptureMode(self):
        self.__view.startButton.setEnables = False
        buttonText = self.__view.startButton.text()
        self.__view.startButton.setText("Capture en cours...")
        self.__view.tableView.setModel(PacketList(self, []))
        self.__view.payload.clear()
        QtCore.QCoreApplication.processEvents()
        return buttonText

    def leaveGuiCaptureMode(self, buttonText):
        self.__view.tableView.resizeColumnsToContents()
        self.__view.tableView.horizontalHeader().setStretchLastSection(True)
        selection = self.__view.tableView.selectionModel()
        selection.selectionChanged.connect(self.handleRowSelection)
        self.__view.startButton.setText(buttonText)
        self.__view.startButton.setEnables = True
        QtCore.QCoreApplication.processEvents()

    def checkFilters(self, ipAddress, protocol, port):
        return ( (not ipAddress or Sniffer.CheckIP(ipAddress)) and
                 (not protocol or Sniffer.CheckTransportProtocol(protocol)) and
                 (not port or Sniffer.CheckPort(port)) )

    def startCapture(self):
        numPackets = self.__view.numPackets.value()
        ipAddress = self.__view.ipAddress.text().strip()
        protocol = self.__view.protocol.text().strip()
        port = self.__view.port.text().strip()

        if not self.checkFilters(ipAddress, protocol, port):
            return

        buttonText = self.enterGuiCaptureMode()
        try:
            filter = Sniffer.MakeFilter(ipAddress=ipAddress, transportProtocol=protocol, port=port)
            packets = Sniffer.Capture(count=numPackets, filter=filter, timeout=60)
            self.__view.tableView.setModel(PacketList(self, packets))
        except ValueError, message:
                print message
        finally: