¿Cómo contar el paquete de respuesta ARP por minuto?

Estoy configurando una topología local utilizando GNS3. Así que no estoy usando HUB, por lo que el escenario es. Hay 5 computadoras en la red (computadora A, B, C, D, E) y la computadora A tiene que contar el paquete de respuesta ARP en la red. por ejemplo, la computadora A puede detectar que la computadora B envía el paquete de respuesta ARP a la computadora C 1 / minuto. Asummos que la computadora A es un analizador host.

  1. La computadora B tiene un IP: 192.168.1.2
  2. La computadora C tiene un IP: 192.168.1.3
  3. La computadora D tiene un IP: 192.168.1.4
  4. La computadora E tiene un IP: 192.168.1.5

Y yo uso la lista en el diccionario phyton el código es.

from scapy.all import * reply=[] reply.append({"src": " ", "dst" :" ","count": 0}] def count_reply(paket): for itung in reply: if itung['src']==paket['src'] and itung['dst']==paket['dst']: itung['count']+=1 break elif itung['src'] != paket['src'] and itung['dst'] != paket['dst']: reply.append(paket) paket['count']=1 def klasifikasi(pkt): # arp request if pkt[ARP].op == 2: returnpaket = {'src':pkt[ARP].psrc,'dst':pkt[ARP].pdst} return count_reply(returnpaket) sniff(prn=klasifikasi, filter="arp", store=0) print(reply) 

Y traté de enviar una inundación de respuesta de arp desde la computadora C a la computadora B. El paquete de respuesta de ARP que se envió es de 7 paquetes. esperaba que la salida fuera la reply=[{'count':0, 'src':" ", 'dst':" "}, {'count':7, 'src':192.168.1.3, 'dst':192.168.1.2} Pero la salida real es

La salida real

Estoy siguiendo el código usando la solución que pregunté ayer aquí ¿Cómo eliminar un elemento duplicado en la Lista? ¿Cómo puedo resolverlo? Por favor ayúdame esto es para mi tarea. Gracias.

El motivo de las múltiples entradas en su resultado es que ya tiene un elemento en su lista de respuestas ({“src”: “”, “dst”: “”, “count”: 0}), lo que hace que su código siempre active la parte “elif” en su bucle (función count_reply).

Debe revisar cada elemento en su lista de respuestas antes de tomar una decisión sobre la creación de una nueva entrada o la actualización de una entrada existente.

Por ejemplo:

 def count_reply(paket): if len(reply)==0: paket['count'] = 1 reply.append(paket) found = True else: found = False for itung in reply: if itung['src']==paket['src'] and itung['dst']==paket['dst']: itung['count']+=1 found = True break if not found: reply.append(paket) paket['count']=1