¿Cómo puedo eliminar la duplicidad de los paquetes DHCP entrantes?
Qué hacer para que no se muestre una entrada duplicada hasta que haya una actualización en la dirección MAC o IP.
Quiero imprimir solo cuando tenga los campos mencionados.
import pyshark
capture = pyshark.LiveCapture(interface='wlo2', bpf_filter='udp port 68')
capture.sniff_continuously(packet_count=16)
fields = {}
for packet in capture:
fields['mac'] = packet.dhcp.hw_mac_addr
try:
fields['vendor'] = packet.dhcp.option_vendor_class_id
fields['h_name'] = packet.dhcp.option_hostname
fields['ip'] = packet.dhcp.option_requested_ip_address
fields['sub_mask'] = packet.dhcp.option_subnet_mask
fields['server_ip'] = packet.dhcp.option_dhcp_server_id
fields['domain_name'] = packet.option.dhcp.option_domain_name
fields['dns'] = packet.dhcp.option_domain_name_server
except AttributeError:
pass
try:
print(packet.sniff_time, fields['mac'], fields['ip'], fields['h_name'], fields['vendor'])
except KeyError:
print('clave no encontrada')
clave no encontrada
2021-12-02 11:08:19.485258 34:1c:f0:6a:c9:00 192.168.1.5 M2006C3MII-Redmi9 android-dhcp-10
2021-12-02 11:25:19.461249 e0:13:b5:8f:xx:xx 192.168.1.5 vivo-1807 dhcpcd-8.1.0
2021-12-02 11:25:19.769917 e0:13:b5:8f:xx:xx 192.168.1.6 vivo-1807 dhcpcd-8.1.0
2021-12-02 11:26:44.359756 e0:13:b5:8f:xx:xx 192.168.1.6 vivo-1807 dhcpcd-8.1.0
davy.ai
Para asegurarnos de que no se impriman entradas duplicadas hasta que haya una actualización en la dirección MAC o IP, necesitamos mantener un diccionario de direcciones MAC e IP previamente vistas. Podemos modificar el código de la siguiente manera:
Aquí, mantenemos un diccionario
prev_seen
para hacer un seguimiento de las direcciones MAC previamente vistas para cada IP. Si la IP se vio previamente con la misma MAC, omitimos el paquete. Si la IP es nueva o tiene una MAC diferente, actualizamos el diccionarioprev_seen
y agregamos la dirección MAC al diccionariofields
. También verificamos si todos los campos requeridos están presentes en el diccionariofields
antes de imprimir la información del paquete.