为什么线程在python scapy的sniff()函数上不起作用?

时间:2019-01-05 04:18:30

标签: python scapy

我有一个代码,我想同时运行函数cek_paket()delete_paket()。我的朋友建议我使用线程。所以不久,我用它来嗅探arp数据包,并将信息(源,目标地址和到达的数据包数量)保存到字典python中的列表中。因此sniff()函数是我用来嗅探数据包的功能。数据包到达后,它将返回到cek_paket()以将信息保存到jumlah_reply列表。我使用delete_reply()每3秒删除第一个列表(jumlah_reply [0])。我在cek_paket()函数中没有问题。问题是,为什么sniffing()函数仅起作用?但是delete_reply函数不起作用?

from scapy.all import*
import thread
import time
jumlah_reply = []
def cek_paket(pkt):

    if pkt[ARP].op ==2:
        destinasi = str(pkt[ARP].pdst)
        source = str(pkt[ARP].psrc)
        dikirim = {'src':source,'dst':destinasi}
        if len(jumlah_reply)==0:
            dikirim['count']=1
            jumlah_reply.append(dikirim)
            found = True
        else:   
            found=False
            for itung in jumlah_reply:
                if itung['src']==dikirim['src'] and itung['dst']==dikirim['dst']:
                    itung['count']+=1
                    found = True
                    break
        if not found:
            jumlah_reply.append(dikirim)
            dikirim['count']=1
    print("reply")
    print(jumlah_reply)
    print("--------------------------------")

def delete_paket():
    if len(jumlah_reply) > 0:
        del jumlah_reply[0]
        print("*********************")
        print (jumlah_reply)
        print("**********************")
    time.sleep(3)
def sniffing():
    sniff(prn=cek_paket,filter="arp",store=0)

try:
    thread.start_new_thread(sniffing())
    thread.start_new_thread(delete_paket())
except:
    print("error")
while 1:
    pass

我期望输出: 当有ARP应答数据包时,信息将被添加到列表中,并且在此之后3秒钟,将删除第一项。但实际输出是

如您所见,信息包已添加到列表中,但是我已经运行了一分钟的代码,delete_reply()函数没有采取任何措施。为什么会这样呢? scapy的sniff()函数会锁定所有进程吗?

0 个答案:

没有答案