es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , , ,

Answer

  1. Avatar for 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:

    import pyshark
    
    capture = pyshark.LiveCapture(interface='wlo2', bpf_filter='arp')
    capture.sniff(timeout=5)
    
    packet_count = {}
    
    for packet in capture:
    
        mac = packet.arp.dst_hw_mac
        ip = packet.arp.dst_proto_ipv4
    
        # Verificar si hemos visto este paquete antes
        clave = (mac, ip)
        if clave in packet_count:
            packet_count[clave] += 1
        else:
            packet_count[clave] = 1
    
        # Imprimir la cantidad de paquetes y los detalles
        count = packet_count[clave]
        print(f"{packet.sniff_time} {count} {mac} {ip}")
    

    Este código producirá una salida similar a la siguiente:

    2022-01-01 00:00:00.000000 1 00:11:22:33:44:55 192.168.1.1
    2022-01-01 00:00:01.000000 1 00:11:22:33:44:55 192.168.1.2
    2022-01-01 00:00:02.000000 2 00:11:22:33:44:55 192.168.1.1
    2022-01-01 00:00:03.000000 1 00:66:77:88:99:aa 192.168.1.1
    2022-01-01 00:00:04.000000 1 ff:ff:ff:ff:ff:ff 192.168.1.1
    2022-01-01 00:00:05.000000 1 00:11:22:33:44:55 192.168.1.2
    

    En este ejemplo, podemos ver que el paquete con dirección MAC 00:11:22:33:44:55 y dirección IP 192.168.1.1 se vio dos veces, y el paquete con dirección MAC 00:11:22:33:44:55 y dirección IP 192.168.1.2 se vio dos veces. Los otros paquetes se vieron solo una vez.

Comments are closed.