#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. всегда показывайте пример в вопросе, а не в комментариях — это будет более читабельно, и покажите, что у вас есть при выходе — все пакеты — и что вы ожидали в результатах подсчета существующих.