我有一个.csv
文件:
csv file
包含来自wireshark扫描的数据包头数据,我正在使用for循环逐行进行迭代。该列表包含约100,000个项目,其中许多重复。我正在尝试查找使用1至1024范围内的每个端口上的TCP协议(6)访问每个目标IP地址的次数。本质上,我正在尝试创建如下所示的内容:
{ip address: {(protocol:port):count}}
我将在哪里知道协议/端口组合尝试使用IP地址作为目的地的次数。到目前为止,我已经尝试过:
dst = defaultdict(list)
for pkt in csvfile:
if(pkt.tcpdport > 0 and pkt.tcpdport < 1025):
tup = (pkt.proto, pkt.tcpdport)
dst[pkt.ipdst].append(tup)
当我尝试将其打印出来时,会获得带有协议的IP地址列表,每个IP地址多次列出端口元组。如何获得它以便显示元组,然后显示每个字典条目中出现该元组的次数?
答案 0 :(得分:1)
当前,行throw
告诉dst[pkt.ipdst].append(tup)
,获取与IP地址关联的值,然后将元组附加到该地址。在这种情况下,这意味着您要将元组附加到与IP地址关联的字典中。这就是为什么您看到每个IP地址列出多个元组的原因。
要解决此问题,只需将行更改为python
。这是告诉dst[pkt.ipdst][tup] += 1
获取与IP地址关联的字典,获取与该字典中的元组关联的计数,然后加1。打印时,它应按预期显示。
还要将python
定义为dst
,以便在未尝试协议,端口组合的情况下,也不会抛出defaultdict(lambda:defaultdict(dict))
。