Python 计算源IP向目标IP发送数据包的次数
这是我的代码:Python 计算源IP向目标IP发送数据包的次数,python,list,dictionary,Python,List,Dictionary,这是我的代码: pkt = PcapReader(r'C:\Users\snoopgrapes\Desktop\evidence-packet-analysis.pcap') srce = [] dstn = [] dict = {} for p in pkt: if IP in p: src = p[IP].src dst = p[IP].dst srce.append(str(src)) dstn.append(st
pkt = PcapReader(r'C:\Users\snoopgrapes\Desktop\evidence-packet-analysis.pcap')
srce = []
dstn = []
dict = {}
for p in pkt:
if IP in p:
src = p[IP].src
dst = p[IP].dst
srce.append(str(src))
dstn.append(str(dst))
我想计算源IP向目标IP地址发送数据包的次数。我已经能够将这些对添加到单独的列表中。我也可以合并这两个列表。我还能够将IP对添加到字典中。如何计算SRC IP发送到DST IP的次数并将结果存储在字典中
例如:
{50: 192.168.1.10, 10.10.10.50, 35:172.16.10.1,172.16.255.254}
您显式地要求一个dictionary作为result对象——因为您正在计算,所以使用a可能是有意义的。即使您需要一个
dict
,计数器也可以简单地转换为一个。我在这篇文章的末尾附上了一个例子
字典
但是,要使用字典明确地执行此操作,可以使用with对(source
,destination
)作为键,只需增加每对的存储编号:
从集合导入defaultdict
# ...
计数=defaultdict(int)
对于分组中的分组:
如果IP在数据包中:
source=数据包[IP].src
目的地=数据包[IP].dst
计数[(源、目标)]+=1
最简单的工作示例:
从集合导入defaultdict
类ObjectDict(dict):
def_u_ugetattr_u_u(self,key):
如果键入self:
返回自[键]
IP=“IP”
数据包=[
{
“IP”:ObjectDict({
“src”:“192.168.1.1”,
“dst”:“192.168.1.1”,
}),
},
{
“IP”:ObjectDict({
“src”:“192.168.1.1”,
“dst”:“192.168.1.1”,
}),
},
{
“IP”:ObjectDict({
“src”:“192.168.1.2”,
“dst”:“192.168.1.1”,
}),
},
{
“IP”:ObjectDict({
“src”:“192.168.1.1”,
“dst”:“192.168.1.2”,
}),
},
]
计数=defaultdict(int)
对于分组中的分组:
如果IP在数据包中:
source=数据包[IP].src
目的地=数据包[IP].dst
计数[(源、目标)]+=1
打印(笔录(计数))
输出:
{('192.168.1.1', '192.168.1.1'): 2, ('192.168.1.2', '192.168.1.1'): 1, ('192.168.1.1', '192.168.1.2'): 1}
如果使用defaultdict
不是一个选项,您只需将添加行替换为:
counts[(源,目标)]=counts.get((源,目标),0)+1
利用可与一起使用的默认值
柜台
如果要使用一个,你可以这样做
#采用与上述相同的设置
计数器_生成器=((p[IP].src,p[IP].dst)用于数据包中的p(如果IP在p中)
计数=计数器(计数器\u生成器)
打印(计数)
打印()
打印(笔录(计数))
输出:
Counter({('192.168.1.1', '192.168.1.1'): 2, ('192.168.1.2', '192.168.1.1'): 1, ('192.168.1.1', '192.168.1.2'): 1})
{('192.168.1.1', '192.168.1.1'): 2, ('192.168.1.2', '192.168.1.1'): 1, ('192.168.1.1', '192.168.1.2'): 1}
我不知道你在循环的
pkt
中有什么,但是在循环中如果你有src
和dst
两个,那么你只需为每一对添加计数器,就像你的例子一样,比如{(src1,dst1):counter1,(src2,dst2):counter2}
,所以在循环时,如果两者都存在,你可以简单地增加计数器。