天天看點

mininet 畫網絡拓撲圖

根據 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 檔案

mininet 畫網絡拓撲圖

(2) 在 cli.py 檔案下的 do_net 函數下添加語句:

globalv.file2 = open(‘1. 中自定義檔案名 ‘,’w’)

globalv.file2 .close()

mininet 畫網絡拓撲圖

2) 修改 mininet/mininet/ 下的 util.py 檔案

(1) 導入 globalv.py

mininet 畫網絡拓撲圖

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

mininet 畫網絡拓撲圖

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(,Node_count):
    temp.append(file1.readline() )
    if(temp[i][]==' ' or temp[i][]=='\n'):
       Net_Nodes.append(temp[i][:])#提取每個節點名稱
        else:
       Net_Nodes.append(temp[i][:])#提取每個節點名稱
    file1.close()
    return Net_Nodes

#節點添加到無向圖
def Net_Node_Add_to_Graph(Net_Nodes):
    for i in range(,Node_count):
    G.add_node(Net_Nodes[i])

#從檔案中擷取鍊路資訊并添加到無向圖中
def Get_Links():
    for i in range(,Node_count):
    for j in range(,Node_count):
        if ( temp[i].count(Net_Nodes[j]) !=  ):
           G.add_edge(Net_Nodes[i],Net_Nodes[j])
        if(Net_Nodes[i]=='c0' and (Net_Nodes[j][]=='s'or (Net_Nodes[j][]=='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(,Node_count):
      if (Net_Nodes[i][]=='H' or Net_Nodes[i][]=='h' or Net_Nodes[i][]=='W' or Net_Nodes[i][]=='w'):
         nx.draw_networkx_nodes(G,pos,nodelist=[Net_Nodes[i]],node_size=,node_color='r',node_shape='s')
      if (Net_Nodes[i][]=='S' or Net_Nodes[i][]=='s' ):
     nx.draw_networkx_nodes(G,pos,node_size=,nodelist=[Net_Nodes[i]],node_color='b')
      if (Net_Nodes[i][]=='c' or Net_Nodes[i][]=='C'):
     nx.draw_networkx_nodes(G,pos,node_size=,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 畫網絡拓撲圖

該方法的不足:在mininet中建立網絡拓撲之後,需要執行net指令把網絡的連結情況存到net.txt檔案,當網絡拓撲該改變之後,需要再次執行net指令才能列印新的拓撲.