【发布时间】:2020-10-15 16:41:03
【问题描述】:
我目前正在开发一个网络扫描器,它会持续扫描易受攻击的 URL。 我想为我的程序提供一个 GUI,因此选择使用 tkinter。
目前我面临一个问题,当我通过按下其他脚本的按钮从主程序(GUI)调用时,GUI 将冻结,并且仅在程序完成扫描整个单词列表时才会加载。
我知道线程并尝试将其应用到我的程序中。但它似乎不起作用,我不确定为什么。
我已经浏览了几个小时的许多 stackoverflow 页面并实施了它们,但它似乎仍然没有成功。我试过的一个例子是python running task in the background while allowing tkinter to be active
我的代码如下:
主界面
from Tkinter import *
from URLFuzzerNonRecursive import nonrecursiveURL
import threading
def thread(value):
t = threading.Thread(target=nonrecursiveURL(value))
t.start()
#t.join()
def main():
master = Tk()
master.title("Web Fuzzer")
master.geometry("700x400")
urllabel = Label(master, text="Input URL to Fuzz")
urllabel.place(relx=0.35, rely=0.05)
urlinput = Entry(master, bd =5)
urlinput.place(relx=0.35, rely=0.10)
urlinput.insert(END,"http://")
nonrecursionURL = Button(master, text="Non-Recursive URL Fuzzer", command=lambda: thread(urlinput.get()),width=20, height=2)
nonrecursionURL.place(relx=0.35, rely=0.30)
master.mainloop()
if __name__ == '__main__':
main()
主 GUI 调用的 Python 脚本:
import requests
import tkinter.messagebox as tkmb
import tkinter as tk
import threading
def nonrecursiveURL(URLtoTake):
root = tk.Tk()
ybar = tk.Scrollbar(root)
T = tk.Text(root)
ybar.config(command=T.yview)
T.config(yscrollcommand=ybar.set)
T.grid(row=0, column=0, columnspan=5)
ybar.grid(row=0, column=5, sticky="ns")
try:
with open('wordlist.txt') as f:
for line in f:
website = URLtoTake.strip('\n')+"/" + line
URL = requests.get(website)
if URL.status_code == 200:
foundsites.append(website)
info_message = "Status code: "+ str(URL.status_code) + " Found :" + website
T.insert(tk.END,info_message)
else:
info_message = "Status code: "+ str(URL.status_code) +" Not Found :" + website
T.insert(tk.END,info_message)
for i in foundsites:
T.insert(tk.END,"\n")
T.insert(tk.END,"Found : ")
T.insert(tk.END, i)
except requests.exceptions.RequestException:
info_message = "Please enter a valid URL ( inclusive of http:// )"
tkmb.showinfo("Output", info_message)
【问题讨论】:
标签: python multithreading python-2.7 tkinter