一、实现的功能
基于python+scapy设计协议编辑器,基于Tkinter的Python GUI界面设计。实现了MAC、ARP、IP 、TCP、UDP协议的编辑与发送,并且支持生成协议字段的默认值,支持用户输入协议字段值,发包前对协议字段的合理性进行检查,发包前自动计算并显示校验和,支持单次发包、多次发包,支持连续发包,连续发包时可随时停止和计算并显示数据包发送速度的功能。
注:
程序源代码:https://download.csdn.net/download/wmrem/10439779
运行前需要先安装第三方库scapy,安装方法:https://blog.csdn.net/wmrem/article/details/80004819
二、主要函数说明——IP包的编辑与发送为例
1.创建IP包编辑器界面,为每个按钮绑定单击响应时间。
def create_ip_sender():1.设置协议编辑器的界面
ip_fields = 'IP协议的版本:',…… , '目的IP地址:'
entries = create_protocol_editor(protocol_editor_panedwindow, ip_fields)
2.创建发送,默认值,清空按钮,并绑定功能
send_packet_button, reset_button, default_packet_button = create_bottom_buttons(protocol_editor_panedwindow)
3.为"回车键"的Press事件编写事件响应代码,发送IP包
tk.bind('<Return>', (lambda event: send_ip_packet(entries, send_packet_button))) # <Return>代表回车键
4.为"发送"、默认值、按钮的单击事件编写事件响应代码,发送IP包
send_packet_button.bind('<Button-1>', (
lambda event: send_ip_packet(entries, send_packet_button)))
…
2. 在协议字段编辑框中填入默认IP包的字段值,为IP数据包的发送做好准备
def create_default_ip_packet(entries):1.清空各字段的值
clear_protocol_editor(entries)
2.创建默认的IP数据包,并将其各字段的值填入协议编辑器的对应的文本框中
default_ip_packet = IP()
entries[0].insert(0, int(default_ip_packet.version))
…
3.获取协议编辑器文本框的值,创建对应的数据包并开启一个线程用于连续发送数据包。
def send_ip_packet(entries, send_packet_button):if 按钮为发送时:
1. 从协议编辑框中获取要发送的数据包的各个字段的值
ip_version = int(entries[0].get())
…
2.用获取的数据包的各字段的值创建相应的数据包
packet_to_send = IP(version=ip_version,……,src=ip_src, dst=ip_dst)
3.开一个线程用于连续发送数据包,并启动
t = threading.Thread(target=send_packet, args=(packet_to_send,))
t.start()
4.使协议导航树不可用
toggle_protocols_tree_state()
send_packet