我有一个代码,我想同时运行函数cek_paket()
和delete_paket()
。我的朋友建议我用线。很快,我就用它来嗅探arp包,并将信息(源地址、目的地址和包到达的数量)保存到python字典的列表中。所以sniff()
函数是scapy用来嗅探数据包的函数。数据包到达后,它将返回cek_paket()
,将信息保存到jumlah\u回复列表。我使用delete_reply()
每3秒钟删除一次第一个列表(jumlah\u reply[0])。我在cek_paket()
函数中没有问题。问题是,为什么sniffing()
函数只能工作?但是删除回复功能不起作用?你知道吗
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\u reply()函数没有任何操作。为什么会这样?scapy lock的sniff()函数是整个过程的一部分吗?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐