我正在制作一个Ryu应用程序,该应用程序必须跟踪网络“对话”,也就是说,双向L4流。问题是,尽管有很多方法可以做到这一点,但是效率是一个大问题。
理想的是以某种方式说明方向性的哈希。这样,您仍然有一个哈希表,但是哈希表会匹配流量是否为:
[SRCIP:A,DSTIP:B,SRCPORT:A,DSTPORT:B
或
[SRCIP:B,DSTIP:B,SRCPORT:A,DSTPORT:A
我使用了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的相同组合将产生相同的哈希。