как я могу обновить счетчик активных пакетов

#python #python-3.x #count #counter #pyshark

#питон #python-3.x #считать #счетчик #пышарк

Вопрос:

я хочу обновлять только поля счетчика, если приходит новый пакет. другие поля останутся существующими без ошибок и просто обновят поле счетчика

 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' already_seen = [] count = Counter()  for packet in capture:  keys['ip'] = packet.arp.dst_proto_ipv4  keys['mac'] = packet.arp.dst_hw_mac  seen = keys['mac'], keys['ip']  count.update([(keys['mac'], keys['ip'])])   if keys['mac'] not in e_mac:  if seen not in already_seen:  already_seen.append(seen)  print(packet.sniff_time, count[(keys['mac'], keys['ip'])], keys['mac'], keys['ip'])  

Вывод, который я получаю:

 2021-12-07 11:20:59.488378 1 f8:c4:f3:56:a3:70 192.168.1.1 2021-12-07 11:21:51.942304 1 44:af:28:2c:6d:6b 192.168.1.195 2021-12-07 11:22:31.135620 1 28:d1:27:1a:12:c0 192.168.1.3  

в счетчике нет обновлений, так как я останавливаю дубликат mac. если удалить условие дублирования, то начнется подсчет каждого конкретного пакета. Здесь я просто хочу, чтобы поле счетчика работало динамически, и всякий раз, когда я получаю пакет, оно обновляет только поле счетчика.

Комментарии:

1. Я не понимаю, на что вы хотите рассчитывать. Каков ожидаемый результат? Покажите это для вас на примере данных. Используя кортеж (mac,ip) , вы подсчитываете, сколько раз вы получаете одну и ту же пару (mac, ip) — если вы хотите подсчитать только, сколько раз вы получаете несколько mac , то вам следует использовать mac вместо (mac,ip)

2. в основном он просто обновляет счетчик всякий раз, когда поступает один и тот же пакет(один и тот же mac и ip)

3. 2021-12-07 11:43:37.657319 1 f8:c4:f3:56:a3:70 192.168.1.1 2021-12-07 11:43:37.755687 2 f8:c4:f3:56:a3:70 192.168.1.1 2021-12-07 11:43:54.142179 1 28:d1:27:1a:12:c0 192.168.1.3 2021-12-07 11:44:01.713647 1 ff:ff:ff:ff:ff:ff 192.168.1.1 2021-12-07 11:44:27.827003 3 f8:c4:f3:56:a3:70 192.168.1.1 2021-12-07 11:44:27.926120 4 f8:c4:f3:56:a3:70 192.168.1.1

4. таким образом, этот код должен его учитывать, но в вашем примере всегда есть разные пары mac, ip , поэтому он всегда получает только 1.

5. всегда показывайте пример в вопросе, а не в комментариях — это будет более читабельно, и покажите, что у вас есть при выходе — все пакеты — и что вы ожидали в результатах подсчета существующих.