我正在制作一个必须跟踪网络“对话”,即双向L4流的应用程序。
您可以对5元组数据进行哈希处理,但问题是只能在一个方向上使用。哈希在返回时更改。我可以想到几种方法来执行此操作,但是似乎没有一种方法特别干净。
我正在寻找以编程上最有效的方式来跟踪网络对话的想法。
我使用了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的相同组合将产生相同的哈希。