16.WireShark学习-在WireShark中添加新协议

16. 在Wireshark中添加新协议

  1. WireShark编程基础
  2. 使用Lua开发简单扩展功能
  3. 使用WireShark开发新的协议解析器
  4. 测试新协议

WireShark支持Lua语言编写的脚本

16.1 WireShark编程基础

在WireShark中添加lua脚本

到WireShark安装目录中init.lua文件中进行配置
1

把需要加载的脚本加进来

2

协议解析

WireShark中主要是靠端口来判断协议的

可以打开视图——内部——解析器表——Integer Tables

3

应用层协议不是属于TCP就是UDP,因此我们找到TCP,可以看到解析是依靠端口

4

proto(name,desc)函数:注册协议,desc是描述

dissector(tvb,pinfo,tree):tvb表示要处理的报文缓存(应用层数据存到tvb中),pinfo表示报文,tree表示报文的解析树。

local foo123=Proto("foo1233","foo123 Protocol")

function foo123.dissector(tvb,pinfo,tree)

end

DissectorTable.get("tcp.port"):add(10005,foo123)
//该函数将协议添加到解析器表中,也就是说凡是发往10005端口的协议都按foo123协议来解析


保存为lua文件,放到WireShark安装目录中

5

编辑init.lua

6

如果脚本有问题的话,会报错

7

打开“视图——内部——解析器表”后会发现已经添加进解析器表了。

8

接下来设计协议 内容

9

10

使用lua构造协议


local foo123=Proto("foo1233","foo123 Protocol")

//注册字段
Trans_ID=ProtoField.uint16("foo123.ID","ID")

Msg_Type=ProtoField.uint16("foo123.Type","Type")

Msg_Data=ProtoField.uint32("foo123.Data","Data")

foo123.fields={Trans_ID,Msg_Type,Msg_Data}





function foo123.dissector(tvb,pinfo,tree)

pinfo.cols.protocol="foo123"//设置显示的协议名字
local subtree=tree:add(foo123,tvb(0))
subtree:add(Trans_ID,tvb(0,2))//添加到协议解析树中
subtree:add(Msg_Type,tvb(2,2))
subtree:add(Msg_Data,tvb(4,4))
end

DissectorTable.get("tcp.port"):add(10005,foo123)




构造数据包来验证

使用xcap这个工具,使用方法:

大体步骤:
1. 创建报文
2. 添加报文内容
3. 发送报文
  1. 创建报文组

右键报文组,创建报文组
11

  1. 添加报文

12

下一步,它是按照层来的,这个是数据链路层

13

网络层修改协议为TCP

14

目标端口改为10005

15

用全0填充就好了,保存,关闭

在这里插入图片描述

  1. 选择接口发送数据包,需要和WireShark抓包的网卡选择一样

启动接口
16

过滤foo123的数据包

17

发送数据包

18

可以看到能够解析foo123协议

19

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值