簡體   English   中英

Tkinter窗口凍結時,凍結

[英]Tkinter window freezes when sniffing with scapy

import tkinter as tk
import random
import scapy.all as scapy

result = ""

def getmac(ip):
    arplayer = scapy.ARP(pdst=ip)
    etherlayer = scapy.Ether(dst="ff:ff:ff:ff:ff:ff")
    packet = etherlayer/arplayer
    answeredList = scapy.srp(packet, timeout=2, verbose = False)[0]
    return answeredList[0][1].hwsrc

def sniff():
    scapy.sniff(store=False, prn=checkattack)

def checkattack(packet):
    try:
        if packet.haslayer(scapy.ARP) and packet[scapy.ARP].op == 2:
            realmac = getmac(packet[scapy.ARP].psrc)
            rspmac = packet[scapy.ARP].hwsrc
            if realmac != rspmac:
                result = "WARNING"
    except IndexError:
        pass

GUI = tk.Tk()

GUI.title("NETWORK GUARDIAN")

GUI.geometry("600x500")

# === labels ===
label1 = tk.Label(text="> Welcome to the NETWORK GUARDIAN !", font=("Times", 11))
label1.grid(column = 0, row = 0)

label2 = tk.Label(text = result, font=("Arial Black", 15))
label2.grid(column = 0, row = 3)

# === buttons ===
button1 = tk.Button(text="Scan for attacks", command = sniff)
button1.grid(column = 0, row = 2)

GUI.mainloop()

我有這個用scapy制作的arp欺騙工具,但是我試圖通過使用tkinter很好地顯示結果。 問題是當我按下按鈕掃描可能的攻擊時,窗口凍結。 我猜這是因為sniff()函數是一個長期運行的函數。 有人可以幫助我以正確的方式進行這項工作嗎?

也許您可以嘗試使用線程模塊來防止其中斷tkinter循環? 語法是這樣的

import threading 
sniffThread = threading.thread(target=sniff)
sniffThread.run()
sniffThread.stop() 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM