基于5个元组数据的有效存储和转发方式

问题描述 投票:-3回答:1

我正在制作一个Ryu应用程序,该应用程序必须跟踪网络“对话”,也就是说,双向L4流。问题是,尽管有很多方法可以做到这一点,但是效率是一个大问题。

问题:

  • 双向数据必须易于查找。例如,一个幼稚的方法可能是对5个元组进行哈希处理,然后对哈希执行查找。但是,问题在于,由于src / dst IP和端口的方向性,它实际上将是两个散列。
  • 另一种方法可能是简单地将ip / port组合存储在表中,然后进行检查。问题在于需要为每个数据包提取这些值,然后考虑方向性,这似乎很麻烦。

理想

理想的是以某种方式说明方向性的哈希。这样,您仍然有一个哈希表,但是哈希表会匹配流量是否为:

[SRCIP:A,DSTIP:B,SRCPORT:A,DSTPORT:B

[SRCIP:B,DSTIP:B,SRCPORT:A,DSTPORT:A

python networking flow
1个回答
0
投票

我使用了Corelight的pycommunityid。它将允许您提供一个流元组,然后根据所提供的数据生成一个sha1哈希。这将解决上述双向问题(请参见pseudocode

import communityid

cid = communityid.CommunityID()

tpl = communityid.FlowTuple.make_tcp('127.0.0.1', '10.0.0.1', 1234, 80)
print(cid.calc(tpl))

tpl = communityid.FlowTuple.make_tcp('10.0.0.1', '127.0.0.1', 80, 1234)
print(cid.calc(tpl))

输出:

1:mgRgpIZSu0KHDp/QrtcWZpkJpMU=
1:mgRgpIZSu0KHDp/QrtcWZpkJpMU=

从上面可以看到,流向不是问题,并且ip / port的相同组合将产生相同的哈希。

© www.soinside.com 2019 - 2024. All rights reserved.