基于Pcap4j收发自定义协议报文(注意事项/踩坑总结)

大致内容:完善自定义的Cat21协议,补充至少5个数据类型不同的协议字段 用户输入Cat21协议字段,发送数据包 用户捕获Cat21数据包,打印输出字段值

本篇博客是直接将自定义协议报文封装在MAC帧的payload中的。

一、Cat21Packet类

1.添加自定义字段

2.在含有原来字段的函数增加新增字段的操作

以及添加相应获取数据的函数

如果新增数据段在Header,就在Header类中定义每个字段的大小和偏移量(如果是Payload就在Payload类中定义)注意字段大小一定要和字段类型占用大小一致,否则在解析时会出错!!!

以此类推在相应构造函数中添加新增变量,类型无法直接转换的需要单独写函数完成,例如:

二、Send类

1.将端口改为不容易冲突的,方便后面用过滤器抓特定的报文

2.由用户输入各字段信息

3.修改builder中相应的变量

三、CapPacket类

1.设置网卡过滤器,使用 BPF(Berkeley Packet Filter)语法来过滤捕获的数据包

2.反序列化自定义协议报文的时候,这里踩了一个坑,Cat21Packet中的构造函数有抛出异常,所以在用原始数据构造一个自定义协议对象的时候也要写异常的处理的方式,否则会报错

3.数据异常可以检查一下字节流中的数据是否对应的上,如有异常可能是字段长度偏移量问题

 例:

 

本篇博客自定义协议字段类型(29bytes):

  • byte cat; - byte 类型占用 1 字节
  • short length; - short 类型占用 2 字节
  • int fspec; - int 类型占用 4 字节
  • byte sign; - byte 类型占用 1 字节
  • boolean judge; - boolean 类型通常占用 1 字节(尽管在Java中它的大小没有明确指定,但通常实现为1字节)
  • long i64; - long 类型占用 8 字节
  • float flt; - float 类型占用 4 字节
  • double dbl; - double 类型占用 8 字节

解析结果

解析字段和输入一致则抓包解析成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值