Почему поток не работает на функцию sniff () на Python Scapy? - PullRequest
0 голосов
/ 05 января 2019

У меня есть код, я хочу запустить функции cek_paket() и delete_paket() одновременно. Мой друг предлагает мне использовать нить. Итак, вкратце, я использую это, чтобы прослушать пакет arp и сохранить информацию (источник, адрес назначения и количество поступившего пакета) в список в словаре python. Так что функция sniff() - это функция от scapy, которую я использую, чтобы прослушать пакет. После прибытия пакета он вернет его на cek_paket(), чтобы сохранить информацию в списке jumlah_reply. И я использую delete_reply(), чтобы удалять первый список (jumlah_reply [0]) каждые 3 секунды. У меня нет проблем с функцией 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 () не выполняет никаких действий. Почему это случилось? функция sniff () из блокировки scapy - это весь процесс?

...