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

How to process network flow information in Python to display communicating nodes?

我正在尝试了解如何最好地将我在 JSON 中通过 PacketBeat 收集的网络流量可视化为图表,并需要一些意见和建议。

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

到目前为止,我的想法是处理 PacketBeat JSON,以便创建一个唯一网络节点列表以及一个单独的元组列表,格式如下(源,目标,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", "machineB", "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")

最近我倾向于 GvGen,因为我上周浪费了半个小时试图让 PyGraphviz 安装在 end-user 计算机上。我整个周末都用 GvGen 替换了 PyGraphviz,我想我将来会倾向于这种方式。如果你 运行 它只是在你自己的电脑上,pygraphviz 很好很容易。安装方便你马上就知道