博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
wireshark解析自定义的protobuf协议
阅读量:6158 次
发布时间:2019-06-21

本文共 1669 字,大约阅读时间需要 5 分钟。

先看最终效果

image

 

wireshark是开源的,而且在Windows下安装时用的是64位,所以相应的库文件需要使用64位。

一个Lua插件的Dissector结构大致如下:

do      -- 协议名称为 m_MeteoricProto,在Packet Details窗格显示为 XXX Protocol       local struct = Struct    local data_dis = Dissector.get("data")    local m_MeteoricProto = Proto("meteoric_proto","XXX Protocol")     function m_MeteoricProto.dissector(buffer, pinfo, tree)         --在主窗口的 Protocol 字段显示的名称为 XX_Protobuf        pinfo.cols.protocol:set("XX_Protobuf")        if Meteoric_dissector(buffer, pinfo, tree) then                    else            -- data 这个 dissector 几乎是必不可少的; 当发现不是我的协议时, 就应该调用data            data_dis:call(buffer, pinfo, tree)        end    end    DissectorTable.get("tcp.port"):add(tcp_port, m_MeteoricProto)end

剩下的就是对Buffer的解析了。注意的几个坑点:

1、wireshark自带lua版本是5.2,安装目录下有lua52.dll;

2、wireshark自带zlib库文件,名字叫zlib1.dll;

 

在编写插件时,将编译生成好的*.dll文件放到wireshark安装目录下,在lua中直接require(“xx”)即可,如果报错,在系统的环境变量中添加 LUA_CPATH,值为dll所有目录位置。

项目的protobuf用的是lua-protobuf, 。编译64的lua-protobuf时,我下载了lua 5.2.4的源码,然后进行的编译。新建一个项目,用来导出lua-protobuf.dll文件。

image

 

注意要引用lua52.dll,配置附加库目录、附加包含目录。

 

用到的另外一个库是lua-zlib

我先下载了zlib的源码,版本为 1.2.11。使用cmake进行编译,之后将cmake生成的zconf.h文件复制到zlib-1.2.11目录下,然后配置lua-zlib工程。

image

image

同样配置附加包含目录、附加包含库的路径,最终生成lua_zlib.dll文件,然后将其改名为zlib.dll。复制到wireshark安装目录,lua中直接require(“zlib”)

 

使用Dependency Walker查看生成的dll是否正确

image

image

 

在解析消息的过程中,我使用了递归的方法来展开所有数据。

local function AddTreeNode(nodeTree, msgTable)        for k,v in pairs(msgTable) do            if type(v) == "table" then                AddTreeNode(nodeTree:add(k), v)            else                 nodeTree:add(k..":", v)            end        end    end

 

目前客户端  -> 服务器,服务器 –> 客户端的数据都可以正常解析出来。我定义了本机的ip,然后通过 pinfo.src 是否与本机 ip 相等来判断是否当前消息为客户端发给服务端的数据。

 

参考:

转载地址:http://ztofa.baihongyu.com/

你可能感兴趣的文章
Main函数参数argc,argv说明
查看>>
Debian 7 Wheezy 安装 VirtualBox
查看>>
SSMS 2005 连接 SQL SERVER 2008问题
查看>>
Android用户界面开发:控件集合
查看>>
RFID Cooking with Mifare Classic
查看>>
组策略妙用----通过组策略禁止域用户更改IP地址
查看>>
用oledb导出数据到excel
查看>>
error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
查看>>
游戏运行时报0xc000007b错的解决办法
查看>>
如何实现一个HTML5 RPG游戏引擎——第五章,实现人物和人物特效
查看>>
Qt Installer Framework实战
查看>>
刑事案件的构成要素 zt
查看>>
NoSQL之【MongoDB】学习(二):DML和查询操作说明
查看>>
北漂工作心得
查看>>
给那些因为Firebug而舍不得FireFox的朋友
查看>>
JTree常用方法
查看>>
高质量视频学习网站
查看>>
百度地图定位SDK 之构想
查看>>
利用Windows 2003系统中实现两个网段的路由
查看>>
对象和对象集合对象
查看>>