如何在Python中处理网络流信息以显示通信节点?

问题描述

我试图了解如何最好地将通过PacketBeat以JSON格式收集的网络流可视化为图表,并需要一些建议。

这样做的原因是提供一种简单的方法来突出显示网络中哪些设备正在与其他设备进行通信等。

到目前为止,我的想法是处理PacketBeat JSON,以创建唯一网络节点列表以及以(source,destination,destination_port)之类的格式记录元组的单独列表,以记录与谁对话。

如果要使用“ graphviz” Python库之类的图形生成图形,我不确定上面的方法是否是最佳方法

我将不胜感激。

解决方法

是pygraphviz或gvgen都可以很好地完成此任务的。 GVGen的依赖性较小,它会生成一个“ .dot”文件,然后将其馈送到“ dot”命令行工具,可通过下载graphviz软件包获得该工具。 Pygraphviz可以直接转到png,svg等,但是在某些计算机上安装起来可能会更困难。

我同时使用了pygraphviz和gvgen,它们都非常简单,可以生成所需的结果。

但是作为一个粗略的例子,对于gvgen(我今天才使用),您会说:

import os
from gvgen import GvGen

graph = GvGen()

sources = ["machineA","machineB","machineC"]
connections = [("machineA","22"),("machineC","machineA","80")]

nodes = {name: graph.newItem(name) for name in sources}
for source,target,port in connections:
    newlink = graph.newLink(nodes[source],nodes[target])
    graph.propertyAppend(newlink,"label",port)

with open("foo.dot","w") as outfile:
    graph.dot(outfile)

os.popen(f"dot -Tpng foo.dot -ofoo.png")

最近,我根据上周浪费在试图让PyGraphviz安装在最终用户计算机上的半个小时而倾向于GvGen。我度过了一个周末,用GvGen替换PyGraphviz,我认为将来会这样。如果您仅在自己的计算机上运行它,则pygraphviz既简单又方便。您会立即知道它是否易于安装。