在寫SDN控制器應用或者改寫控制器源碼的時候,經常需要抓包,驗證網絡功能,以及流表的執行結果等等,wireshark是個很好的抓包分析包的網絡工具,下面簡介如何用wireshark軟件抓取OpenFlow數據包
一. wireshark2.0.0
wireshark2.0.0直接內置了OpenFlow協議,只需要安裝wireshark2.0.0即可。
在安裝wireshark之前需要安裝一些依賴包:
sudo apt-get install bison flex libpcap-dev gcc
然后通過wget或者自己上官網下載wireshark2.0.0源碼,不過現在發現wireshark的官網很容易上不去,所以提供一個百度雲鏈接:wireshark2.0.0源碼,下載之后對源文件解壓縮,並跳轉至文件目錄中
tar -vxjf wireshark-2.0.0.tar.bz2 cd wireshark-2.0.0
配置,並進行安裝
./configure make make install
在配置過程中遇到了如下兩個問題:
- error: qt is not avaiable
reason: qt在兩年前將用戶界面庫由GTK+切換到Qt進行了重寫,所以需要安裝qt
solution:
- 原來的libmgl-qt5已經不存在了,取而代之的是libmgl-qt7.0.0,所以可以apt-get install libmgl-qt7.0.0
- apt-get install qttools5-dev(我選擇的方法)
- apt-get install qt-sdk,所需要的磁盤空間偏大
- error:GTK+ 3 is not available
solution:apt-get install libgtk-3-dev
在安裝完成,啟動過程中遇到一個問題:
error:error while loading shared libraries: libwiretap.so.5: cannot open shared object file: no such file or directory
sulution:ldconfig (ldconfig是一個動態鏈接庫管理命令,通常在系統啟動時運行,而當用戶安裝了一個新的動態鏈接庫時,需要手動更新這個命令,他在默認搜索目錄(/lib和/usr/lib)以及動態庫配置文件/etc/ld.so.conf內所列的目錄下,搜索出可共享的動態鏈接庫(如lib*.so*),進而創建出動態裝入程序(ld.so)所需的連接和緩存文件,緩存文件默認為/etc/ld.so.cache,此文件保存已排好序的動態鏈接庫名字列表。
再次啟動wireshark,可以添加過濾規則查看(比如OpenFlow1.3協議過濾規則為openflow_v4)
二. 其他版本的wireshark(以wireshark1.10.3,OpenFlow1.3為例)
加入你已經安裝了wireshark,不想重新卸載安裝,那么可以安裝wireshark的插件,其中第四行等號后面需要的是你的wireshark的目錄
apt-get install scons git clone https://github.com/CPqD/ofdissector cd ofdissector/src export WIRESHARK="your wireshark source code location" scons install
如果遇到如下問題:
openflow-common.cpp: In function 'void proto_reg_handoff_openflow()': openflow-common.cpp:59:60: error: 'dissector_add' was not declared in this scope scons: *** [openflow-common.os] Error 1 scons: building terminated because of errors.
將openflow-commom.cpp中的59行和60行改成如下代碼:
dissector_add_uint("tcp.port", OFP_TCP_PORT, openflow_handle); dissector_add_uint("tcp.port", 43984, openflow_handle);
插件安裝好之后,需要將其拷貝到wireshark的安裝目錄下:
# sudo cp ~/.wireshark/plugins/openflow.so /usr/local/lib/wireshark/plugins/1.10.3/
之后打開wireshark,如下圖,在help-About Wireshark-plugins中如果看到openflow.so,則表示安裝成功。
wireshark對於網絡數據包、網絡功能的分析十分有用,支持OpenFlow的wireshark可以幫助我們調試代碼,熟悉OpenFlow協議等等