在最近工作中经常会遇到需要合并的抓包,wireshark自带mergecap命令,但是如果需要合并多个文件的时候,还是有点麻烦。顺手编写了一个小脚本,手动选择要合并的文件,目的文件夹。会生成合并命令,可以直接执行,并打开目标文件夹。
界面如下
代码如下:
import tkinter
import os
import time
import tkinter.filedialog
def dstpkg():
cmd_filename = tkinter.filedialog.askdirectory()
# Folderpath = filedialog.askdirectory()
if cmd_filename != '':
print(cmd_filename)
# dstpkg_lable.config(text='要导入的命令文件是:' + cmd_filename)
dstpkg_lable.delete(1.0,tkinter.END)
dstpkg_lable.insert(1.0,cmd_filename)
else:
dstpkg_lable.insert(1.0,"输入有误")
def srcpkg():
cmd_filename = tkinter.filedialog.askopenfilenames()
if cmd_filename != '':
print(cmd_filename)
for i in cmd_filename:
# dstpkg_lable.config(text='要导入的命令文件是:' + cmd_filename)
srcpkg_lable.insert(tkinter.END,i)
srcpkg_lable.insert(tkinter.END,'\n')
else:
srcpkg_lable.insert(1.0,"输入有误")
def merge():
dst_file_name=dstpkg_lable.get('1.0','end').strip()+'/'+time.asctime().replace(' ','_').replace(':','_')+'.pcap'
print('-----------------------')
print('目的文件',dst_file_name)
# src_file_names=srcpkg_lable.get('1.0','end').replace('\n',' ')
src_file_names = srcpkg_lable.get('1.0', 'end')
srctmp=src_file_names.splitlines()
srclen=len(srctmp)
for i in range(srclen):
if srctmp[(srclen - i - 1)][-4:] != 'pcap':
print(srctmp[(srclen - i - 1)][-4:])
print(srctmp[(srclen - i - 1)],'不合格文件')
srctmp.pop((srclen - i - 1))
src_file_names=' '.join(srctmp)
print('源文件',src_file_names)
merge_cmd="mergecap.exe -w %s %s"%(dst_file_name,src_file_names) #合成命令
print('合并命令',merge_cmd)
gen_lable.insert(1.0,merge_cmd) #文本框中显示
# print(os.popen(merger_cmd).read())
def merge_do():
merge_cmd2=gen_lable.get('1.0','end')
os.popen(merge_cmd2).read()
os.popen("explorer.exe %s" % dstpkg_lable.get('1.0','end').replace('/','\\'))
# 按间距中的绿色按钮以运行脚本。
if __name__ == '__main__':
root = tkinter.Tk() # 初始化Tk()
root.title("合并抓包数据v0.1") # 设置窗口标题
root.geometry("800x400") # 设置窗口大小 注意:是x 不是*
root.resizable(width=True, height=True) # 设置窗口是否可以变化长/宽,False不可变,True可变,默认为True
# l = tkinter.Label(root, text="显示内容", bg="white", font=("Arial", 12), width=8, height=2)
# l.grid(row=0, column=1) # 这里的side可以赋值为LEFT RTGHT TOP BOTTOM
#
# t = tkinter.Text(root, width=20, height=2, font=("Arial", 22))
# t.grid(row=0, column=2)
#
# ##############################################
dstpkg_but = tkinter.Button(root, width=20,text='目标文件夹:' ,command= dstpkg)
dstpkg_but.grid(row=5, column=1)
dstpkg_lable = tkinter.Text(root, width=70, height=2, font=("Arial", 10), bg='white')
dstpkg_lable.grid(row=5, column=2)
dstpkg_clear = tkinter.Button(root, width=20,text='清空目标文件夹:' ,command=lambda : dstpkg_lable.delete(1.0,tkinter.END) )
dstpkg_clear.grid(row=5, column=3)
srcpkg_but = tkinter.Button(root, width=20,text='需要合并的文件',command= srcpkg)
srcpkg_but.grid(row=10, column=1)
srcpkg_lable = tkinter.Text(root, width=70, height=7, font=("Arial", 10), bg='white')
srcpkg_lable.grid(row=10, column=2)
srcpkg_clear = tkinter.Button(root, width=20,text='清空合并:' ,command=lambda : srcpkg_lable.delete(1.0,tkinter.END) )
srcpkg_clear.grid(row=10, column=3)
gen_but = tkinter.Button(root, width=20,text='生成合并命令',command= merge)
gen_but.grid(row=15, column=1)
gen_lable = tkinter.Text(root, width=70,height=2, font=("Arial", 10), bg='white')
gen_lable.grid(row=15, column=2)
gen_clear = tkinter.Button(root, width=20,text='清空命令:' ,command=lambda : gen_lable.delete(1.0,tkinter.END) )
gen_clear.grid(row=15, column=3)
merge_but = tkinter.Button(root, width=20,height=5,text='执行命令并打开文件夹',command= merge_do)
merge_but.grid(row=20, column=2)
root.mainloop() #