Cómo agregar un contador en la captura en tiempo real de paquetes.
Quiero que cada vez que llegue un paquete igual, se actualice el contador e imprima.
import pyshark
from collections import Counter
capture = pyshark.LiveCapture(interface='wlo2', bpf_filter='arp')
capture.sniff(timeout=5)
keys = {}
e_mac = '00:00:00:00:00:00' or 'ff:ff:ff:ff:ff:ff'
already_seen = []
count = 0
for packet in capture:
keys['ip'] = packet.arp.dst.proto.ipv4
keys['mac'] = packet.arp.dst.hw.mac
seen = keys['mac'], keys['ip']
if keys['mac'] != e_mac:
if seen not in already_seen:
already_seen.append(seen)
count += 1
print(packet.sniff_time, count, keys['mac'], keys['ip'])
Actualmente, este es el resultado que recibí:
2021-12-06 18:59:55.325859 28:d1:27:1a:12:c0 192.168.1.3
2021-12-06 18:59:58.704726 f8:c4:f3:56:a3:70 192.168.1.1
2021-12-06 19:00:02.286922 ff:ff:ff:ff:ff:ff 192.168.1.1
2021-12-06 19:02:15.854700 44:af:28:2c:6d:6b 192.168.1.195
2021-12-06 19:07:02.440235 90:e8:68:f2:00:c1 192.168.1.13
El resultado actual que deseo es que el contador se actualice solo para un paquete específico, es decir, cuántas veces lo recibí. Si aparece una nueva dirección MAC, mantendrá un contador separado para ese paquete.
davy.ai
Para obtener la salida deseada, podemos usar un diccionario para hacer un seguimiento de la cantidad de cada paquete basado en su dirección MAC y dirección IP. Podemos actualizar la cantidad cada vez que veamos el mismo paquete y mostrarla junto con la dirección MAC y la dirección IP.
Aquí hay una versión actualizada del código:
Este código producirá una salida similar a la siguiente:
En este ejemplo, podemos ver que el paquete con dirección MAC
00:11:22:33:44:55
y dirección IP192.168.1.1
se vio dos veces, y el paquete con dirección MAC00:11:22:33:44:55
y dirección IP192.168.1.2
se vio dos veces. Los otros paquetes se vieron solo una vez.