【网络】网络协议调试工具包

背景

在Python中可用scapy构建网络协议栈中的各种包结构,并且其简洁的表达语法使得使用者大多数情况下不必关注细枝末节。
scapy包的主要便利在于:1.checksum自动计算 2.长度自动设置

在Java世界中,我还没有看到这样的工具包出现,因此我打算自己写一个。

主要功能

对于调试网络协议而言,方便的语法有助于快速深入协议内容。因此,我们选择groovy作为开发语言。

此外,为了将使用者的关注点从各种消息头部转移到消息本身,我们使用注解为类型添加额外的计算信息,然后在序列化和反序列化时这些域自动调整到合适的值。这些注解包括:
1.@Calculated(n): 指定该域的值为计算后面n个域的字节长度
2.@Length(n): 指定该域序列化时所占用的字节长度。默认情况下使用java的类型信息,如byte=1, short=2,int=4,long=8, 不支持浮点类型
3.@Timstamp(seconds, milliseconds): 指定一个域使用时间戳自动生成
4.@Randomized(lower,upper): 指定一个域使用随机数生成,可指定上下限
5.@Typed(method): 指定一个域的动态类型,所谓动态类型某个域的枚举类型决定另外一个域的实际类型;该注解指定一个 方法名用于返回实际类型

enum的序列化和反序列化

enum需要声明一个value域,当序列化时,此enum占用的空间就是value的空间;当反序列化时,为了保证enum的唯一性,需要从enum的值空间中根据value的相等性查出唯一的enum。

Links

该工具已经发布到github: https://github/xhd2015/net-protocol-tools

ANS1

参见包:com.fulton_shaw.net.ans1

HTTPS/TLS

参见包:com.fulton_shaw.net.tls_https

二进制数据操作

方法注意事项
数字->字节数组splitLittleEndian, splitBigEndianJava的扩展是有符号数,因此操作字节时必须加上 &0xff
字节数组->16进制表示的字符串getHexString
16进制表示的字符串 -> 字节数组parseHexString
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值