Java实现SDN拓扑获取
思路
由于Java调用北向接口过程复杂,故此处编写Python脚本获取拓扑
使用Jython包完成Pyhon脚本的调用
考虑到Python和Java的数据结构难以直接转换,这里选择将脚本获取的拓扑用无向图的形式保存本地文件topo.txt
通过Java读取本地文件,并进行处理分析,发送到前端
实现
Python脚本编写
引入相关包
import sdn_net as sn
import networkx as nx
import json
此处利用了networkx的Graph图结构;json用于将数据转化为字典集;sdn_net是之前写的流表下发和拓扑抽象的脚本,此处引用其中的函数其实就是懒
调用北向接口获取链路信息
G = nx.Graph()
status,resp = sn.get_links(ip)
resp = json.loads(resp)
for i in resp["links"]:
G.add_edge(i["src"]["device"],i["dst"]["device"])
这里使用了Graph做无向图,解决了链路双向的处理问题
写入本地文件
# 清空文件
f = open('topo.txt', 'w')
f.write('')
f.close()
# 写入文件
f = open('topo.txt