У меня есть код, я хочу запустить функции 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 - это весь процесс?