資源簡介
基于python+scapy設計協議編輯器,基于Tkinter的Python GUI界面設計。實現了MAC、ARP、IP 、TCP、UDP協議的編輯與發送,并且支持生成協議字段的默認值,支持用戶輸入協議字段值,發包前對協議字段的合理性進行檢查,發包前自動計算并顯示校驗和,支持單次發包、多次發包,支持連續發包,連續發包時可隨時停止和計算并顯示數據包發送速度的功能。
代碼片段和文件信息
#?coding=utf-8
import?datetime
import?tkinter
from?tkinter?import?*
from?tkinter.constants?import?*
from?tkinter.ttk?import?Treeview?style
from?scapy.all?import?*
from?scapy.layers.inet?import?*
from?scapy.layers.l2?import?*
tk?=?tkinter.Tk()
tk.title(“協議編輯器“)
#?tk.geometry(“1000x700“)
#?使窗體最大化
tk.state(“zoomed“)
#?左右分隔窗體
main_panedwindow?=?PanedWindow(tk?sashrelief=RAISED?sashwidth=5)
#?協議編輯區窗體
protocol_editor_panedwindow?=?PanedWindow(orient=VERTICAL?sashrelief=RAISED?sashwidth=5)
#?協議導航樹
protocols_tree?=?Treeview()
#?當前網卡的默認網關
default_gateway?=?[a?for?a?in?os.popen(‘route?print‘).readlines()?if?‘?0.0.0.0?‘?in?a][0].split()[-3]
#?用來終止數據包發送線程的線程事件
stop_sending?=?threading.Event()
#?狀態欄類
class?StatusBar(frame):
????def?__init__(self?master):
????????frame.__init__(self?master)
????????self.label?=?Label(self?bd=1?relief=SUNKEN?anchor=W)
????????self.label.pack(fill=X)
????def?set(self?fmt?*args):
????????self.label.config(text=fmt?%?args)
????????self.label.update_idletasks()
????def?clear(self):
????????self.label.config(text=““)
????????self.label.update_idletasks()
#?狀態欄
status_bar?=?StatusBar(tk)
status_bar.pack(side=BOTTOM?fill=X)
status_bar.set(“%s“?‘開始‘)
def?create_protocols_tree():
????“““
????創建協議導航樹
????:return:?協議導航樹
????“““
????protocols_tree.heading(‘#0‘?text=‘選擇網絡協議‘?anchor=‘w‘)
????#?參數:parent?index?iid=None?**kw?(父節點,插入的位置,id,顯示出的文本)
????#?應用層
????applicatoin_layer_tree_entry?=?protocols_tree.insert(““?0?“應用層“?text=“應用層“)??#?““表示父節點是根
????http_packet_tree_entry?=?protocols_tree.insert(applicatoin_layer_tree_entry?1?“HTTP包“?text=“HTTP包“)
????dns_packet_tree_entry?=?protocols_tree.insert(applicatoin_layer_tree_entry?1?“DNS包“?text=“DNS包“)
????#?傳輸層
????transfer_layer_tree_entry?=?protocols_tree.insert(““?1?“傳輸層“?text=“傳輸層“)
????tcp_packet_tree_entry?=?protocols_tree.insert(transfer_layer_tree_entry?0?“TCP包“?text=“TCP包“)
????upd_packet_tree_entry?=?protocols_tree.insert(transfer_layer_tree_entry?1?“UDP包“?text=“UDP包“)
????#?網絡層
????ip_layer_tree_entry?=?protocols_tree.insert(““?2?“網絡層“?text=“網絡層“)
????ip_packet_tree_entry?=?protocols_tree.insert(ip_layer_tree_entry?0?“IP包“?text=“IP包“)
????icmp_packet_tree_entry?=?protocols_tree.insert(ip_layer_tree_entry?1?“ICMP包“?text=“ICMP包“)
????arp_packet_tree_entry?=?protocols_tree.insert(ip_layer_tree_entry?2?“ARP包“?text=“ARP包“)
????#?網絡接入層
????ether_layer_tree_entry?=?protocols_tree.insert(““?3?“網絡接入層“?text=“網絡接入層“)
????mac_frame_tree_entry?=?protocols_tree.insert(ether_layer_tree_entry?1?“MAC幀“?text=“MAC幀“)
????protocols_tree.bind(‘<>‘?on_click_protocols_tree)
????style?=?style(tk)
????#?get?disabled?entry?colors
????disabled_bg?=?style.lookup(“TEntry“?“fieldbackground“?(“disabled“))
????style.map(“Treeview“
??????????????fieldbackground=[(“disabled“?disabled_bg)]
??????????????foreground=[(“disabled“?“gray“)]
??????????????bac
評論
共有 條評論