Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算源IP向目标IP发送数据包的次数_Python_List_Dictionary - Fatal编程技术网

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}
,所以在循环时,如果两者都存在,你可以简单地增加计数器。