1. 引言

本文相关内容可参考Wireshark开发指南第2章”Quick Setup”

要对wireshark代码进行修改,除了下文介绍的lua插件的方式以外,都需要对wirehshark源码进行编译(C外置解析插件不需要编译整个wireshark,都需要下载wireshark源码及需要的库),因此有必要学习如何搭建Wireshark开发环境。

本文主要介绍在Windows下编译Wireshark 64位版本的方法和步骤,Mac OSX上的情况稍做了介绍。

下面开始按顺序分小节介绍编译步骤,内容以Wireshark 1.12.x和1.99.x版本为依据,其他较旧版本大同小异。

2. Windows

2.1 下载源码

源码压缩包:https://www.wireshark.org/download/src/all-versions/

Git(应该是主线):git clone https://code.wireshark.org/review/wireshark

2.2 准备Visual C++

要编译wireshark,开发电脑上应该安装了Visual Studio并包括了Visual C++,请至少安装Visual Studio 2010以减少不必要的麻烦。

2.3 安装Qt (Optional)

http://www.qt.io/download-open-source/#section-2下载与你的Visual Studio版本及处理器结构相对应的Qt版本。

注意,目前Qt官方安装包只对Visual Studio 2013提供了64bit支持,要使用Visual Studio 2010编译Wireshark,需要下载Qt opensource源码并自行编译为64二进制库。

2.4 准备PowerShell (Optional)

在Win7之前的旧系统上编译Wireshark新版本需要安装PowerShell。

2.5 安装Cygwin及相关包

到http://www.cygwin.com/下载Cygwin的安装程序,执行在线安装,后面将会看到,如果使用旧的Cygwin版本,可能会导致错误。安装时根据提示,选中以下包(*号为可选项):

  • Archive/unzip
  • *Archive/zip (only needed if you intend to build the U3 package)
  • Devel/bison
  • Devel/flex
  • *Devel/subversion (optional - see discussion about using Subversion below)
  • Interpreters/perl
  • Utils/patch
  • Web/wget

假设其安装到C:\Cygwin64。

2.6 安装Python

https://www.python.org/ 下载安装Python 2.7版本,假设安装到C:\Python27

2.7 准备编译命令行

到wireshark源码主目录建一个批处理文件,如setenv.bat,内容如下

@ECHO off

SET PATH=%PATH%:.
SET CYGWIN_BIN=C:\cygwin64\bin
SET QT5_BASE_DIR=D:\dev\qt-everywhere-opensource-src-5.3.2\qtbase
SET QT5_BIN=D:\dev\qt-everywhere-opensource-src-5.3.2\qtbase\bin
SET PATH=%PATH%;%CYGWIN_BIN%;%QT5_BIN%
SET WIRESHARK_LIB_DIR=D:\dev\Wireshark-win64-libs-1.12 SET VISUALSTUDIOVERSION=10.0
SET PLATFORM=X64
SET WIRESHARK_VERSION_EXTRA=-zzq-x64 ECHO 设置 Visual Studio environment...
CALL "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" amd64 title Command Prompt (MSVC++ 2010 64bit) GOTO :eof

解释一下:

  • CYGWIN_BIN: cygwin可执行文件目录
  • QT_5XXX: Qt相关目录
  • VISUALSTUDIOVERSION: 编译所用的Visual Studio版本号
  • PLATFORM:目标平台,即将wireshark编译为32位还是64位
  • WIRESHARK_VERSION_EXTRA:附加版本信息,这个字符串会出现在编译好的Wireshark的“About Wireshark”对话框内的版本信息中
  • CALL那行:表示设定Visual C++ 2010 64位编译模式环境变量

如果不想编译Qt版本,则脚本改成如下:

@ECHO off

REM Batch script for compiling Wireshark on Windows.
REM I have disabled the Qt version build because it's meaningful
REM in 1.99.x only I think. SET PATH=%PATH%:.
SET CYGWIN_BIN=C:\cygwin64\bin
REM SET QT5_BASE_DIR=D:\dev\qt-everywhere-opensource-src-5.3.2\qtbase
REM SET QT5_BIN=D:\dev\qt-everywhere-opensource-src-5.3.2\qtbase\bin
REM SET PATH=%PATH%;%CYGWIN_BIN%;%QT5_BIN%
SET PATH=%PATH%;%CYGWIN_BIN%
SET WIRESHARK_LIB_DIR=D:\dev\Wireshark-win64-libs-1.12 SET VISUALSTUDIOVERSION=10.0
SET PLATFORM=X64
SET WIRESHARK_VERSION_EXTRA=-zzq-x64 ECHO Setup Visual Studio environment...
CALL "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" amd64 title Command Prompt (MSVC++ 2010 64bit) GOTO :eof

2.8 修改/config.nmake文件

打开wireshark源码主目录下的config.nmake文件,进行以下改动

  • 找到WIRESHARK_LIB_DIR=,将其设置为编译wireshark编译所依赖的第三方库文件的目录,见下文解释
  • 找到LOCAL_CFLAGS=,加入想要的编译器Flag

此文件中的设置项很多,可以根据自己的需要自行修改。

2.9 检查编译工具链是否就绪

打开wireshark源码目录中的setenv.bat,(打开后就不要关了,以后还要用),运行

nmake -f Makefile.nmake verify_tools

如下图所示:

如果没有错误提示,证明编译所需要的所有软件和工具都安装好了。

2.10 安装第三方依赖库

编译wireshark需要依赖不少第三方库,如下图所示

这些库可以用wireshark编译脚本自动下载,也可以手动下载。这些库的下载地址是:

http://anonsvn.wireshark.org/wireshark-$WIRESHARK_TARGET_PLATFORM-libs/tags/$DOWNLOAD_TAG/packages/

其中$WIRESHARK_TARGET_PLATFORM要替换成你所要编译的目标平台,如win32或win64,$DOWNLOAD_TAG要替换成一个日期字符串。比如对于我要编译1.12.0版本,这个地址是:

http://anonsvn.wireshark.org/wireshark-win64-libs/tags/2014-06-19/packages/

如果网络质量好,可以直接运行

nmake -f Makefile.nmake setup

来自动下载安装依赖库。

2.11 开始编译

先运行

nmake -f Makefile.nmake distclean

来清理旧文件,然后运行

namke -f Makefile.nmake all

开始编译。在intel i5-4590 CPU和8GB内存机器上,编译过程大约7分钟。

3. Mac OSX

以1.99.8为例。

  1. 下载源码并解压
  2. 进入主目录,运行./macosx-setup.sh,根据提示,安装所有所需依赖项
    如果不需要Qt支持,请注释掉macosx-setup.sh中的QT_VERSION=x.y.z这一行,且在下面几步不要加入Qt相关的东西
  3. 设定3个环境变量
  4. export
    PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/Users/zzq/Qt5.5.0/5.5/clang_64/lib/pkgconfig:/usr/X11/lib/pkgconfig
  5. export
    CMAKE_PREFIX_PATH=:/Users/zzq/Qt5.5.0/5.5/clang_64/lib/cmake
  6. export
    PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Users/zzq/Qt5.5.0/5.5/clang_64/bin
  7. mkdir build; cd build
  8. cmake ..
  9. make –j 6 app_bundle
    如果wireshark 1.12.6,为make –j 6 all
  10. 编好的文件在build/run下面,也可以make install安装

使用cmake编译时,默认的编译选项由主目录下的CMakeList.txt中的

if( NOT CMAKE_BUILD_TYPE )
set( CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
"Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
FORCE)
endif()

设定为RelWithDebInfo,如果想要开发调试,最好设成Debug。可以在这里设置,也可以在cmake命令行中设置:

cmake –DCMAKE_BUILD_TYPE=Debug.

另外,为了使Mac OSX下编译的GTK+版本的wireshark能运行,需要先启动X11(由Quartz安装,默认在Launchpad中的”其他“里),然后在shell里输入export DISPLAY=:0.0,再运行./wireshark就可以了。

4. 参考

Wireshark开发指南第2章”Quick Setup”

【wireshark】开发环境搭建的更多相关文章

  1. wireshark开发环境搭建

    自己完成了wireshark开发环境的搭建,主要参考资料是wireshark的官方developer-guide.pdf,网址:https://www.wireshark.org/docs/. 现把搭 ...

  2. Nordic nRF51/nRF52开发环境搭建

    本文将详述Nordic nRF51系列(包括nRF51822/nRF51802/nRF51422等)和nRF52系列(包括nRF52832/nRF52810/nRF52840)开发环境搭建. 1. 强 ...

  3. ubuntu-10.10嵌入式开发环境搭建【转】

    本文转载自:http://blog.csdn.net/zjhsucceed_329/article/details/8036781 版权声明:本文为博主原创文章,未经博主允许不得转载. ubuntu- ...

  4. SDN开发环境搭建以及Mininet编程

    一.实验内容 搭建如下网络拓扑,并熟悉相关指令.   二.搭建开发环境 2.1 开发环境搭建 2.1.1下载ubuntu镜像文件 镜像下载地址 https://www.ubuntu.com/downl ...

  5. python开发环境搭建

    虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...

  6. IntelliJ IDEA安装及jsp开发环境搭建

    一.前言 现在.net国内市场不怎么好,公司整个.net组技术转型,就个人来说还是更喜欢.net,毕竟不是什么公司都像微软一样财大气粗开发出VS这样的宇宙级IDE供开发者使用,双击sln即可打开项目, ...

  7. Qt for Android开发环境搭建及测试过程记录

    最近学习了Qt的QML编程技术,感觉相较于以前的QtGUI来说更方便一些,使用QML可以将界面与业务逻辑解耦,便于开发. QML支持跨平台,包括支持Android平台,因此可以使用Qt的QML进行An ...

  8. node.js之开发环境搭建

    一.安装linux系统 (已安装linux可跳此步骤) 虚拟机推荐选择:VirtualBox 或者 Vmware (专业版永久激活码:5A02H-AU243-TZJ49-GTC7K-3C61N) 我这 ...

  9. TODO:小程序开发环境搭建

    TODO:小程序开发环境搭建 1.第一步当然是要先注册小程序了 2.登录到小程序 a)完善小程序信息,如名称,图标,描述 3.绑定开发者 4.获取AppID,并设置服务器信息 5.下载并安装开发者工具 ...

随机推荐

  1. axios 设置拦截器 全局设置带默认参数(发送 token 等)

    应用场景: 1,每个请求都带上的参数,比如token,时间戳等. 2,对返回的状态进行判断,比如token是否过期 代码如下: [javascript] view plain copy axios.i ...

  2. Python os.chmod

    os.chmod(path,mode) 这个方法应该很简单,只需要2个参数,一个是路径,一个是说明路径的模式,下面列出了这个用法中可以使用的一些常用的模式: stat.S_ISUID: Set use ...

  3. C#集合类型大盘点(转载)

    原文地址:http://www.cnblogs.com/jesse2013/p/CollectionsInCSharp.html#b02

  4. circos 绘制关系型图ribbon,并加入透明度

    luminance = lum80<<include colors_fonts_patterns.conf>><colors># r,g,b,a color def ...

  5. spring-boot @Async 的使用、自定义Executor的配置方法

    1. TaskExecutor Spring异步线程池的接口类,其实质是java.util.concurrent.Executor Spring 已经实现的异常线程池: 1. SimpleAsyncT ...

  6. 使用WebUploader客户端批量上传图片,后台使用springMVC接收实例

    使用WebUploader客户端批量上传图片,后台使用springMVC接收实例 我是搞Java后台的,因为最近主管让用webUploader写客户端,但是在网上找了很多,能够复制就能用的并没有几个, ...

  7. 2018.09.28 牛客网contest/197/A因子(唯一分解定理)

    传送门 比赛的时候由于变量名打错了调了很久啊. 这道题显然是唯一分解定理的应用. 我们令P=a1p1∗a2p2∗...∗akpkP=a_1^{p_1}*a_2^{p_2}*...*a_k^{p_k}P ...

  8. 2018.06.29 洛谷P1505 [国家集训队]旅游(树链剖分)

    旅游 题目描述 Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间有且只有 ...

  9. 2018.09.08 bzoj4518: [Sdoi2016]征途(斜率优化dp)

    传送门 把式子展开后发现就是要求: m∗(∑i=1msum′[i])−sum[n]2" role="presentation" style="position: ...

  10. yii2 控制器的生命周期

    控制器生命周期 http://www.yii-china.com/doc/guide/structure_controllers.html 处理一个请求时,应用主体 会根据请求路由创建一个控制器,控制 ...