在写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协议等等