一.编译一遍WireShark源代码
参考:https://www.wireshark.org/docs/wsdg_html_chunked/ChSetupWin32.html
1.1安装预备环境
首先安装Chocolately,类似ubuntu的apt-get,用这个省力很多
使用管理员权限打开windows powershell,执行下面指令
PS$>Set-ExecutionPolicy AllSigned PS$>Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
安装完成后,继续使用powershell窗口进行下面操作。
1.1.1安装VS2019 Community(已安装的请跳过,或者也可以直接去微软官方下载)
PS$> choco install -y visualstudio2019community visualstudio2019-workload-nativedesktop
在Visual Studio Installer勾选如下组件:
(1)选中C++桌面开发
(2)
1.1.2 安装QT
推荐安装QT5.15.2(官方教程里使用的版本,现在QT出到6了不知道能不能使)
https://download.qt.io/official_releases/online_installers/
下载.exe,选中Qt 5.15.2,必须勾选msvc2019_64,Qt Debug Information Files,其余随意
推荐默认目录,空间不足也可安装至其他盘符,最好在根目录下
1.1.3安装Python3
PS$> choco install -y python3
执行即可,也可官网安装,尽量安装在默认目录
Py官方安装的缺省目录是在你的用户文件夹下,而WireShark希望你安装在C盘根目录下,所以推荐choco安装
1.1.4安装Perl
Strawberry和Active二选一即可,如果后面编译报错了提示perl奔溃,卸载然后回来重装
PS$> choco install -y strawberryperl # ...or... PS$> choco install -y activeperl
1.1.5 安装Git,用来获取WireShark源代码
PS$> choco install -y git
1.1.6安装CMake
PS$> choco install -y cmake
1.1.7 安装 Asciidoctor, Xsltproc, DocBook
安装Asciidoctor需要一个java runtime,可以自选一种,或者直接按照下面的来就行
PS$>choco install -y zulu PS$> choco install -y asciidoctorj xsltproc docbook-bundle
1.1.8 安装winflexbison
PS$> choco install -y winflexbison3
1.2 开始编译
在c盘根目录下创建文件夹"Development"
启动一个CMD命令行
>cd C:\Development >git clone https://gitlab.com/wireshark/wireshark.git
克隆完成后,点击开始菜单,找到Visual Studio 2019->x64 Native Tools Command Prompt for VS 2019
使用Vs2019的命令行窗口,全程不要关闭,执行以下操作:
> set WIRESHARK_BASE_DIR=C:\Development\wireshark > rem set WIRESHARK_LIB_DIR=c:\wireshark-win64-libs > set QT5_BASE_DIR=C:\Qt\5.15.2\msvc2019_64
WIRESHARK_BASE_DIR指的是wireshark原目录,clone到哪填哪
QT5_BASE_DIR是你的QT5编译器目录,若不是默认安装,填入相应的目录即可
接着创建文件夹wsbuild64,
> mkdir C:\Development\wsbuild64 > cd C:\Development\wsbuild64
执行
> cmake -G "Visual Studio 16 2019" -A x64 ..\wireshark
提示以下信息:
-- Configuring done -- Generating done -- Build files have been written to: C:/Development/wsbuild64
即构建成功
开始编译
> msbuild /m /p:Configuration=RelWithDebInfo Wireshark.sln
若C:\Development\wsbuild64\run\RelWithDebInfo\下有Wireshark.exe,可运行,第一阶段结束
2.编译插件
创建wireshark\plugins\epan\foo目录,并在该目录创建packet-foo.c文件(这个foo是你的插件名)
//这段代码仅供参考与演示,只能显示个协议名。TCP协议端口号43300
编写插件的教程劳烦各位百度,之后我可能也写一篇关于编写C插件的随笔
#include "config.h" #include <epan/packet.h> #define FOO_PORT 43300 static int proto_foo = -1; static int dissect_foo(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree _U_, void *data _U_) { col_set_str(pinfo->cinfo, COL_PROTOCOL, "FOO"); /* Clear the info column */ col_clear(pinfo->cinfo,COL_INFO); return tvb_captured_length(tvb); } void proto_register_foo(void) { proto_foo = proto_register_protocol ( "FOO Protocol", /* name */ "FOO", /* short_name */ "foo" /* filter_name */ ); } void proto_reg_handoff_foo(void) { static dissector_handle_t foo_handle; foo_handle = create_dissector_handle(dissect_foo, proto_foo); dissector_add_uint("tcp.port", FOO_PORT, foo_handle); }
找到wireshark源码目录下的CMakeListsCustom.txt.example重命名为CMakeListsCustom.txt
找到这样一段:
1 # Fail CMake stage if any of these plugins are missing from source tree 2 set(CUSTOM_PLUGIN_SRC_DIR 3 # private_plugins/foo 4 # or 5 # plugins/epan/foo 6 )
去掉这里第5行的井号,如下
1 # Fail CMake stage if any of these plugins are missing from source tree 2 set(CUSTOM_PLUGIN_SRC_DIR 3 # private_plugins/foo 4 # or 5 plugins/epan/foo 6 )
保存即可,这里的foo就是你的协议名称
将wireshark\plugins下的plugin.rc.in文件复制进foo目录,同时wireshark\plugins\epan\gryphon目录下的CMakeLists.txt复制到foo目录
将复制来的CMakeLists.txt打开,将文本中的“gryphon”都替换为"foo"
打开你没关闭的x64 Native Tools Command Prompt for VS 2019窗口(若关了再打开就行cd到wsbuild64)
再次执行
> msbuild /m /p:Configuration=RelWithDebInfo Wireshark.sln
若C:\Development\wsbuild64\run\RelWithDebInfo\plugins\3.5\epan下有一个foo.dll就说明成功了!
若失败了,执行
>msbuild /m /p:Configuration=RelWithDebInfo Wireshark.sln /t:Clean
再执行上面那条指令,若还是报错,请顺着这篇文章找错
3.测试
打开C:\Development\wsbuild64\run\下的Wireshark.exe
进行抓包,这里我使用了两个虚拟机,一个乌班图一个kali,nat连接,主机当网关,抓取对应的虚拟网卡
kali当服务器,ubuntu当客户端,使用python3网络编程,从菜鸟教程抄一段代码
ip都是服务端的ip,测试前请确保你的网络拓扑正确,都能ping通
kali下建立脚本
1 #coding=utf-8 2 #!/usr/bin/python3 3 # 文件名:server.py 4 5 # 导入 socket、sys 模块 6 import socket 7 import sys 8 9 # 创建 socket 对象 10 serversocket = socket.socket( 11 socket.AF_INET, socket.SOCK_STREAM) 12 13 # 获取本地主机名 14 host = '192.168.226.140' 15 16 port = 43300 17 18 # 绑定端口号 19 serversocket.bind((host, port)) 20 21 # 设置最大连接数,超过后排队 22 serversocket.listen(5) 23 24 while True: 25 # 建立客户端连接 26 clientsocket,addr = serversocket.accept() 27 28 print("连接地址: %s" % str(addr)) 29 30 msg='欢迎访问菜鸟教程!'+ "\r\n" 31 clientsocket.send(msg.encode('utf-8')) 32 clientsocket.close()
ubuntu下建立脚本
1 #!/usr/bin/python3 2 # 文件名:client.py 3 4 # 导入 socket、sys 模块 5 import socket 6 import sys 7 8 # 创建 socket 对象 9 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 10 11 12 host = '192.168.226.140' 13 14 # 设置端口号 15 port = 43300 16 17 # 连接服务,指定主机和端口 18 s.connect((host, port)) 19 20 # 接收小于 1024 字节的数据 21 msg = s.recv(1024) 22 23 s.close() 24 25 print (msg.decode('utf-8'))
先执行服务端脚本,然后打开主机wireshark开始抓包,再执行客户端脚本
如下即抓包成功: