中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

pox 中 openflow.webservice 組建的學習與使用

發布時間:2020-07-11 14:45:36 來源:網絡 閱讀:1294 作者:li690347460 欄目:網絡安全

Openflow的一個簡單JSON-RPC-ish web service交互式接口,由of_service信息服務派生而來,依賴于webcore組件。可以使用HTTP POST方式發送JSON進行訪問。

目前支持的方法有:


,        

method介紹參數
get_flow_stats獲取流表的表項dpid - 一個字符串形式的dpid,例如:'00-00-00-00-00-01'

flows -所有流表的列表

get_switch_desc獲取指定交換機詳細信息dpid - 同上
get_switches獲取交換機列表和基本信息

dpid - 同上

match - 流表的匹配條目 (默認匹配所有)

table_id - 流表的id (默認是所有)

out_port - filter by out port (defaults to all)


set_table設置指定交換機的流表None.



在使用pox的過程中 基本只能在./pox.py 后面增加 組建一起運行,而webservice組建提供了一個可以通過web訪問交換機和流表的接口,如上所示,只支持4個功能,我會在接下來的過程中進行演示~ 我基本是看的 pox wiki里面的資料然后進行驗證 得出的結果,不過wiki中有一點bug,我也做了修正。大家也可以參考 pox wiki的內容~  我用的是curl這個東東 執行上面的方法,這個東東的具體介紹這里就略過了~下面直接說我的運行過程把~

首先,這里用到兩個基本的東東  mininet和pox,既然能看本文章的估計也不陌生,所以也不進行講解,本文章指向寫一些,國內網站中難以找到的一些東東。廢話不多說~

首先運行 pox 和mininet(我基本都是su root 用root權限運行,比較個人使用,不用考慮什么安全問題),我們使用mininet默認的拓撲,比較只是功能的演示。


進入pox的目錄 啟動pox和相應的組建,為了驗證測試獲取信息我們開啟了l3_learning組建,這個組建會在ping操作時下發流表:

cd pox                                 
./pox.py openflow.of_01 web.webcore openflow.webservice forwarding.l3_learning


開啟mininet:

mn --controller=remote

一般默認的都會連上~并在pox中輸出如下信息:

INFO:openflow.of_01:[00-00-00-00-00-01 2] connected


我們先在mininet中進行ping操作讓控制器下發流表~

mininet> h2 ping h3

如果能ping通,交換機中就已經有控制器下發的流表了

現在我們就可以通過,curl訪問web接口,獲取信息了~

我們先獲取交換機的流表

curl -i -X POST -d '{"method":"get_flow_stats","params":{"dpid":"00-00-00-00-00-01"},"id" : 1}' http://127.0.0.1:8000/OF/

這個操作分三個部分,前面的是curl命令,在此不講,中間一對大括號中,就是我們要請求的數據,我們是以post的形式,請求數據的,最后就是我們要請求數據的網址,pox wiki中 寫的網址是 http://127.0.0.1:8000 不過根據我自己的測試網站 應該是上面那個。下面我們來具體說下中間那對大括號里的內容;

一般我們發送表單都是一對一對數據的形式發送的,這種形式在python中稱為字典,其他地方可能稱為,哈希表,映射之類的東東~現在說說具體參數把,此方法中有三個參數,method,對應4個選項,已經在開頭列出來了,params 對應的又是一個字典 ,里面包括一些對應方法的參數,比如例子中的方法,method,他就必須指定 我們所要獲取的流表來自那個交換機,而交換機一般由dpid所標識,所以我們輸入的參數就是 dpid,因為獲取交換機的信息只是簡單的操作 所以只有一個參數。在liux終端中執行上面那個命令 就可以獲取控制器所連接的交換機的信息,本例子中的輸出如下:

{"result": {"flowstats": [{"packet_count": 2, "hard_timeout": 0, "byte_count": 196, "duration_sec": 3, "actions": [{"dl_addr": "be:48:cb:78:60:92", "type": "OFPAT_SET_DL_DST"}, {"max_len": 0, "type": "OFPAT_OUTPUT", "port": 2}], "duration_nsec": 194000000, "priority": 65535, "idle_timeout": 10, "cookie": 0, "table_id": 0, "match": {"dl_type": "IP", "nw_dst": "10.0.0.2/32", "dl_src": "52:9d:f5:2b:88:d4", "nw_proto": 1, "nw_tos": 0, "tp_dst": 0, "tp_src": 8, "dl_dst": "be:48:cb:78:60:92", "dl_vlan": 65535, "nw_src": "10.0.0.1", "in_port": 1}}, {"packet_count": 2, "hard_timeout": 0, "byte_count": 196, "duration_sec": 3, "actions": [{"dl_addr": "52:9d:f5:2b:88:d4", "type": "OFPAT_SET_DL_DST"}, {"max_len": 0, "type": "OFPAT_OUTPUT", "port": 1}], "duration_nsec": 193000000, "priority": 65535, "idle_timeout": 10, "cookie": 0, "table_id": 0, "match": {"dl_type": "IP", "nw_dst": "10.0.0.1/32", "dl_src": "be:48:cb:78:60:92", "nw_proto": 1, "nw_tos": 0, "tp_dst": 0, "tp_src": 0, "dl_dst": "52:9d:f5:2b:88:d4", "dl_vlan": 65535, "nw_src": "10.0.0.2", "in_port": 2}}], "dpid": "00-00-00-00-00-01"}, "id": 1}

如果沒自己下發過流表,可能看起來有點艱難,但如果自己下發過流表,基本都能看懂。



獲取指定交換機的信息(用 dpid指定不同的交換機):

curl -i -X POST -d '{"method":"get_switch_desc","params":{"dpid":"00-00-00-00-00-01"},"id" : 1}' http://127.0.0.1:8000/OF/

結果:

{"result": {"switchdesc": {"dp_desc": "None", "sw_desc": "2.3.2", "hw_desc": "Open vSwitch", "serial_num": "None", "mfr_desc": "Nicira, Inc."}, "dpid": "00-00-00-00-00-01"}, "id": 1}

其實什么內容都木有。。。咳咳。。

獲取交換機列表和基本信息:

curl -i -X POST -d '{"method":"get_switches","id" : 1}'

結果:

{"result": [{"n_tables": 254, "ports": [{"hw_addr": "9e:0f:91:2d:a0:8e", "name": "s1-eth2", "port_no": 1}, {"hw_addr": "de:d6:d4:55:9e:e0", "name": "s1-eth3", "port_no": 2}, {"hw_addr": "7a:2a:44:cf:ff:4f", "port_down": true, "link_down": true, "name": "s1", "port_no": 65534}], "dpid": "00-00-00-00-00-01"}], "id": 1}

因為只有一個交換機,所以就獲得了一組信息~

最后就是下發流表了~

curl -i -X POST -d '{"method":"set_table","params":{"dpid":"00-00-00-00-00-01","flows":[{"actions": [{"type":"OFPAT_OUTPUT","port":2}],"match": {"dl_type": "IP","in_port":1 }}]}}' http://127.0.0.1:8000/OF/

params 里面除了指定了dpid  還多了一個flow,在python中中括號里面的是列表的形式,也就是可以同時下發好幾條流表,同理 actions對應的也是列表的形式,對應多個動作。flows里面就是一條一條的流表了,我們指定了流表的匹配那些信息,首先它得是一個ip數據包,然后必須是從1號端口進來的數據包,我們還指定了它匹配成功后的動作是從2號端口轉發~

我們再演示下如何同時下發多條流表:

curl -i -X POST -d '{"method":"set_table","params":{"dpid":"00-00-00-00-00-01","flows":[{"actions": [{"type":"OFPAT_OUTPUT","port":2}],"match": {"dl_type": "IP","in_port":1 }},{"actions":[{"type":"OFPAT_OUTPUT","port":"OFPP_ALL"}]}]}}' http://127.0.0.1:8000/OF/

我們在flows列表中 又加入了一條~

然后我們在mininet中查看流表,執行以下代碼:

mininet> dpctl dump-flows

我們就可以獲取以下信息:

*** s1 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=203.063s, table=0, n_packets=0, n_bytes=0, idle_age=203, actions=ALL
 cookie=0x0, duration=203.102s, table=0, n_packets=0, n_bytes=0, idle_age=203, ip,in_port=1 actions=output:2

到此 所有的內容就結束了,有可能講的不夠明白,也有可能講的太羅嗦,又不懂地方,大家可以留言,或者給我發郵件~ 當然,留言 的話我是不知道幾個世紀才會 上一次博客,所以最好是 發郵件~


最后還有一個問題,當我match 源ip地址的時候老是出現問題

curl -i -X POST -d '{"method":"set_table","params":{"dpid":"00-00-00-00-00-01","flows":[{"actions": [{"type":"OFPAT_OUTPUT","port":2}],"match": {"dl_type": "IP","nw_dst":"192.168.42.0/255.255.255.0" }}]}}' http://127.0.0.1:8000/OF/

如果我這樣下發 就會出現問題,目前無解。。。別人說他在ovs2.5的版本 和 POX eel 中運行沒有錯誤。。。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

井研县| 五家渠市| 乳山市| 萨迦县| 通许县| 怀宁县| 宁河县| 桃源县| 台东市| 长乐市| 方正县| 炎陵县| 丹东市| 永新县| 南丹县| 石河子市| 行唐县| 文安县| 乌拉特前旗| 庆元县| 通州市| 元江| 融水| 留坝县| 尼玛县| 孝昌县| 太谷县| 张家港市| 临猗县| 福海县| 诸暨市| 临洮县| 当阳市| 阿拉善盟| 扶风县| 湖口县| 永善县| 滦平县| 太康县| 南溪县| 黄陵县|