Graphviz小技巧

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

记录一下graphviz使用过程中的小技巧


一、graphviz读取顶点和边

先将顶点和边的信息存入node和edge里面,rankdir参数设置为‘UD’,则输出为纵向。若设置为’LR’则输出为横向

#-*-coding:utf-8-*-
def drawGraph(nodes,edges):
	G = Digraph(comment="Attack Graph",strict=False)
	G.attr(rankdir='UD',size='20,12')
	for node in nodes:
		G.node('{}'.format(node),shape="ellipse",fontname="Fangsong")
	for edge in edges:
		#G.edge(edge[0],edge[1],label=edge[2])
		G.edge(edge[0], edge[1])

	G.render('AG.dot')
	
#节点是字符串形式
#边是通过头节点和尾节点指定的
#node=['a','b','c']
#edge=[['a','b','1'],['a','c','2'],['b','c','0']]

二、图中存在重复节点

思路就是给重复节点打标签,使用label关键字。

#-*-coding:utf-8-*-
def drawGraph(nodes,edges):
    G = Digraph(comment="Attack Graph", strict=False)
    G.attr(rankdir='UD', size='20,12') #纵向
    #G.attr(rankdir='LR', size='20,12') #横向

    count=0
    for node in nodes:
        G.node(str(count),label='{}'.format(node), shape="ellipse", fontname="Fangsong")
        count+=1
    for edge in edges:
        # G.edge(edge[0],edge[1],label=edge[2])
        G.edge(edge[0], edge[1])

    G.render('AG.dot')

得到的dot文件如下:

// Attack Graph
digraph {
	rankdir=LR size="20,12"
	0 [label="攻击者" fontname=Fangsong shape=ellipse]
	1 [label="(GPL TELNET Bad Login,CVE-2021-41083)" fontname=Fangsong shape=ellipse]
	2 [label="(172.16.112.194,s1)" fontname=Fangsong shape=ellipse]
	3 [label="(ICMP PING NMAP,CVE-2019-10639)" fontname=Fangsong shape=ellipse]
	4 [label="(135.13.216.191,s1)" fontname=Fangsong shape=ellipse]
	5 [label="(ICMP PING NMAP,CVE-2019-10639)" fontname=Fangsong shape=ellipse]
	6 [label="(172.16.115.20,s1)" fontname=Fangsong shape=ellipse]
	
	0 -> 1
	1 -> 2
	2 -> 43
	43 -> 44
	44 -> 107
	107 -> 108
	0 -> 3
	3 -> 4
	#示意,只取了一部分数据
}

三、python执行dot,生成png

python也可以直接执行生成的dot文件,生成png格式的文件

import os
os.system("dot -Tpng AG.dot -o tree.png")

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值