您的位置:首页 > 理论基础 > 计算机网络

mininet 画网络拓扑图

2016-06-03 11:35 1116 查看
根据 mininet 平台下 net 命令输出的数据得出网络拓扑

1. 把 net 命令输出的数据写入文件(文件名自定义)的方法

1) 在 mininet/mininet/ 文件夹下写 globalv.py 文件(定义一个全局变量)

”’globalv.py 内容”’

file2 = open(‘1. 中定义的文件名 ‘,’w’)

file2 = file.close()

2) 修改 mininet/mininet/ 下的 cli.py 文件

(1) 导入 globalv.py 文件



(2) 在 cli.py 文件下的 do_net 函数下添加语句:

globalv.file2 = open(‘1. 中自定义文件名 ‘,’w’)

globalv.file2 .close()



2) 修改 mininet/mininet/ 下的 util.py 文件

(1) 导入 globalv.py



(2) 修改 dumpNodeConnections(nodes) 函数添加 file2 高亮部分的语句



3) 重新安装 mininet 内核

在 mininet/util 下执行

bash install.sh -n

3) 此时在 mininet 中输入 net 命令输出的信息已经全部写入 1. 中的自定义文件中,接着处理该文件找出节

点和节点之间情况,并调用 networkx 包画图

1) 安装 networkx 包和 matplotlib 包

网址: http://blog.sina.com.cn/s/blog_607799590102uygu.html

2) 写处理文件和画图程序 (printgraph.py)

#!/usr/bin/env python
## -*- coding:utf-8 -*-
import networkx as nx
import matplotlib.pyplot as plt
Net_Nodes = [] #网络节点列表
temp = []      #每行数据
filename = '/home/linyimin/net_data/net.txt' #存储链路信息的文件
G = nx.Graph()  #创建空的无向图

#从文件中获取所有节点
file1=open(filename,'r') #以读取方式打开文件
Node_count = len(file1.readlines())#获得网络节点数
file1.close()
def Get_Nodes(filename):
file1 = open(filename,'r') #以读取方式打开文件
for i in range(0,Node_count):
temp.append(file1.readline() )
if(temp[i][2]==' ' or temp[i][2]=='\n'):
Net_Nodes.append(temp[i][0:2])#提取每个节点名称
else:
Net_Nodes.append(temp[i][0:3])#提取每个节点名称
file1.close()
return Net_Nodes

#节点添加到无向图
def Net_Node_Add_to_Graph(Net_Nodes):
for i in range(0,Node_count):
G.add_node(Net_Nodes[i])

#从文件中获取链路信息并添加到无向图中
def Get_Links():
for i in range(0,Node_count):
for j in range(0,Node_count):
if ( temp[i].count(Net_Nodes[j]) != 0 ):
G.add_edge(Net_Nodes[i],Net_Nodes[j])
if(Net_Nodes[i]=='c0' and (Net_Nodes[j][0]=='s'or (Net_Nodes[j][0]=='S'))):
G.add_edge(Net_Nodes[i],Net_Nodes[j])

if (__name__ == '__main__'):
Get_Nodes(filename)
Net_Node_Add_to_Graph(Net_Nodes)
Get_Links()
pos = nx.spring_layout(G)
for i in range(0,Node_count):
if (Net_Nodes[i][0]=='H' or Net_Nodes[i][0]=='h' or Net_Nodes[i][0]=='W' or Net_Nodes[i][0]=='w'):
nx.draw_networkx_nodes(G,pos,nodelist=[Net_Nodes[i]],node_size=600,node_color='r',node_shape='s')
if (Net_Nodes[i][0]=='S' or Net_Nodes[i][0]=='s' ):
nx.draw_networkx_nodes(G,pos,node_size=800,nodelist=[Net_Nodes[i]],node_color='b')
if (Net_Nodes[i][0]=='c' or Net_Nodes[i][0]=='C'):
nx.draw_networkx_nodes(G,pos,node_size=1000,nodelist=[Net_Nodes[i]],node_color='g')
nx.draw_networkx_edges(G,pos)
nx.draw_networkx_labels(G,pos)
plt.savefig("/var/www/html/net.png")
plt.show()


3) 运行 printgraph.py 即可画出网络拓扑图



该方法的不足:在mininet中建立网络拓扑之后,需要执行net命令把网络的链接情况存到net.txt文件,当网络拓扑该改变之后,需要再次执行net命令才能打印新的拓扑.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mininet