基于python的图形化抓包工具

# 导入相关模块
import tkinter as tk
from tkinter import scrolledtext
import threading # 导入多线程模块
from scapy.all import * # 导入scapy模块

# 创建一个图形化界面,用于显示抓包结果
root = tk.Tk()  #实例化对象,建立窗口
root.title('Python抓包系统')
root.geometry('800x600')

# 创建一个标签,用于显示过滤条件
filter_label = tk.Label(root, text='过滤条件:')
filter_label.grid(row=0, column=0, sticky='w')

# 创建一个输入框,用于输入过滤条件
filter_entry = tk.Entry(root)
filter_entry.grid(row=0, column=1, sticky='ew')

# 创建一个按钮,用于开始抓包
start_button = tk.Button(root, text='开始')
start_button.grid(row=0, column=2, sticky='e')

# 创建一个按钮,用于停止抓包
stop_button = tk.Button(root, text='停止')
stop_button.grid(row=0, column=3, sticky='e')

# 创建一个滚动文本框,用于显示抓包结果
result_text = scrolledtext.ScrolledText(root)
result_text.grid(row=1, column=0, columnspan=4, sticky='nsew')

# 定义一个变量,用于控制抓包状态
running = False

# 定义一个函数,用于分析和显示数据包
def parse_packet(packet):
    # 显示数据包的摘要信息
    result_text.insert('end', packet.summary() + '\n')  #末尾插入
    # 显示数据包的详细信息
    result_text.insert('end', packet.show(dump=True) + '\n')
    # 显示数据包的16进制表示
    #result_text.insert('end', hexdump(packet,dump=True) + '\n\n')

# 定义一个函数,用于抓取、分析和显示数据包
def capture_packet():
    # 获取过滤条件
    filter_ = filter_entry.get()
    # 清空抓包结果
    result_text.delete('1.0', 'end')
    # 使用scapy的sniff函数来抓取数据包,并传递parse_packet函数作为回调函数
    sniff(prn=parse_packet, filter=filter_, stop_filter=lambda x: not running)

# 定义一个函数,用于开始抓包
def start_capture():
    global running
    # 设置抓包状态为True
    running = True
    # 创建一个新的线程来运行capture_packet函数,并启动该线程
    t = threading.Thread(target=capture_packet)
    t.start()

# 定义一个函数,用于停止抓包
def stop_capture():
    global running
    # 设置抓包状态为False
    running = False

# 绑定开始按钮的点击事件到开始抓包函数
start_button.config(command=start_capture)

# 绑定停止按钮的点击事件到停止抓包函数
stop_button.config(command=stop_capture)

# 启动图形化界面的主循环
root.mainloop()