def import_shell(self): def result(num): QMessageBox.critical(self, 'pyshell', "添加完成,成功%s,失败%s" % (num[0], num[0] ^ num[1])) start_runnable(self.main.refresh_table_item, lambda x: x) separator = self.ui.lineEdit_2.text() start_runnable(load_from_file, result, filename=self.filename, separator=separator)
def init_linker(self): def start(): return Caidao.Caidao(self.siteurl, self.sitepass) def getresult(obj): self.linker = obj start_runnable(start, getresult)
def delete_file(self): @iscomplete def setresult(result): self.refresh() filename = self.get_filename_from_tablewig() start_runnable(self.linker.delete_file, setresult, remote_path=filename)
def execute_cmd(self): # shell命令 command = self.ui.parameter_0.currentText().strip() self.display_info_to_panel(command, command=True) if not command: return self.ui.parameter_2.setText(command) self.ui.parameter_0.addItem(command) self.ui.parameter_0.setCurrentText("") start_runnable(self.ui.linker.exec_command, self.display_info_to_panel, cmd=command)
def export_shell(self): def result(num): QMessageBox.critical(self, 'pyshell', "导出%s条" % (num)) separator = self.ui.lineEdit_2.text() start_runnable(export_shell_file, result, filename=self.filename, separator=separator)
def get_item_form_folder(self, folder, flush=False): if flush: start_runnable(self.linker.get_folder_list, lambda x: self.add_item_to_filetable(x, folder), folder=folder, flush=True) else: start_runnable(self.linker.get_folder_list, lambda x: self.add_item_to_filetable(x, folder), folder=folder, flush=False)
def get_baseinfo_from_server(self): # 类初始化线程 @iscomplete def setresult(window, obj): self.linker = obj self.current_folder = self.linker.current_folder self.get_item_form_folder(self.current_folder) def loadcaidao(): return Caidao.Caidao(self.siteurl, self.sitepass) start_runnable(loadcaidao, lambda x: setresult(self, x))
def new_file(self): @iscomplete def setresult(result): self.refresh() text, okPressed = QInputDialog.getText(self, "pyshell", "pls input new file name:", QLineEdit.Normal, " ") if okPressed and text.strip(): filename = self.ui.ComPath.currentText().strip( ) + self.linker.separator + text start_runnable(self.linker.new_file, setresult, filename=filename)
def get_metadata_from_server(self): def start(): return Caidao.Caidao(self.siteurl, self.sitepass) def getresult(obj): self.linker = obj self.ui.parameter_1.setText("/bin/sh") self.ui.parameter_2.setText("netstat -an | grep ESTABLISHED") # 设置当前内容 self.ui.parameter_0.addItem("netstat -an | grep ESTABLISHED") # 添加到下拉列表 self.execute_cmd() start_runnable(start, getresult)
def rename_file(self): @iscomplete def setresult(result): self.refresh() old = self.get_filename_from_tablewig() text, okPressed = QInputDialog.getText(self, "pyshell", "pls input new name:", QLineEdit.Normal, " ") if okPressed and text.strip(): new = self.ui.ComPath.currentText().strip( ) + self.linker.separator + text start_runnable(self.linker.rename, setresult, src=old, dst=new)
def upload_file(self): @iscomplete def setresult(result): self.refresh() options = QFileDialog.Options() options |= QFileDialog.DontUseNativeDialog fileName, _ = QFileDialog.getOpenFileName( self, "QFileDialog.getOpenFileName()", "", "All Files (*);;Python Files (*.py)", options=options) if fileName: _, remote_fileName = os.path.split(fileName) start_runnable(self.linker.upload_file, setresult, remote_file=remote_fileName, local_file=fileName)
def batch_text(self): self.successed = 0 self.failed = 0 self.failed_list = [] def result(res): if res[0]: self.successed += 1 else: self.failed += 1 self.failed_list.append(res[1]) self.cls.statusBar.showMessage( "批量测试中 %s/%s" % (self.successed + self.failed, len(rows.selectedRows())), 3000) if self.successed + self.failed >= len(rows.selectedRows()): QMessageBox.critical( self.cls, 'pyshell', "批量测试完成,成功%s,失败%s,正在删除失效shell" % (self.successed, self.failed)) if self.failed_list: for i in self.failed_list: id = self.cls.ui.tableWidget.item(i, 0).text() self.db.delete(int(id)) self.cls.ui.tableWidget.removeRow(i) else: QMessageBox.information(self.cls, 'pyshell', "删除失效shell成功") rows = self.cls.ui.tableWidget.selectionModel() for row in rows.selectedRows(): id = self.cls.ui.tableWidget.item(row.row(), 0).text() url = db().get(int(id)).shell passwd = db().get(int(id)).passwd start_runnable(test_shell, result, url=url, passwd=passwd, type="php", row=row.row())
def tableWidget_ini(self): self.db = db() self.tableWidget.setColumnCount(7) # 列 self.tableWidget.setRowCount(0) # 行 len(node) self.tableWidget.setHorizontalHeaderLabels( ['ID', '-', '网址', 'IP/物理位置', '备注', 'insert', 'update']) self.tableWidget.setColumnWidth(0, 0) # 设置表格的各列的宽度值 self.tableWidget.setColumnWidth(1, 40) # 设置表格的各列的宽度值 self.tableWidget.setColumnWidth(2, 300) # 设置表格的各列的宽度值 self.tableWidget.setColumnWidth(3, 290) # 设置表格的各列的宽度值 self.tableWidget.setColumnWidth(4, 90) # 设置表格的各列的宽度值 self.tableWidget.setColumnWidth(5, 150) # 设置表格的各列的宽度值 self.tableWidget.setColumnWidth(6, 150) # 设置表格的各列的宽度值 self.tableWidget.setRowHeight(0, 23) self.tableWidget.setEditTriggers( QTableWidget.NoEditTriggers) # 设置表格的单元为只读属性,即不能编辑 self.tableWidget.setSelectionBehavior( QTableWidget.SelectRows) # 点击选择是选择行//设置选中时为整行选中 self.tableWidget.setAlternatingRowColors(True) # 还是只可以选择单行(单列) self.tableWidget.verticalHeader().hide() # 隐藏行头 start_runnable(self.refresh_table_item, lambda x: x)
def save_file(self): content = self.ui.data_textEdit.toPlainText() filename = self.ui.name_lineEdit.text().strip() start_runnable(self.linker.save_file, lambda x: x, filename=filename, content=content) self.main_ui.statusBar.showMessage("saved file success", 2000)
def dis_file_to_panel(self): self.ui.name_lineEdit.setText(self.remote_file) start_runnable(self.linker.read_file, self.display, item=self.remote_file)
def exc_code(self): content = self.ui.textEdit.toPlainText() start_runnable(self.linker.raw, lambda x: self.ui.messages.setPlainText(x), data=content)
def result(num): QMessageBox.critical(self, 'pyshell', "添加完成,成功%s,失败%s" % (num[0], num[0] ^ num[1])) start_runnable(self.main.refresh_table_item, lambda x: x)