最近需要手动写一个pcap文件,网上查了一下资料,都是瞎BB,互相抄袭,提供的方法都解决不了问题,所以就自己研究了一下,怎么可以按照抓包自动生成pcap的文件格式,自己手动填充一个文件。
首先思路就是,先找一个抓包生成的正常的pcap文件,我们可以先看下里边都有啥,然后仿照内容,我写一个一模一样的文件,就可以了,先看个正常的,
找个16进制编辑器(如果需要编辑器,可以参考:https://blog.csdn.net/weixin_42209881/article/details/137146130),打开随便一个正常的pcap文件就可以,注意我标记的地方,这些地方都是有讲究的,
-
0xa1b2c3d4用来表示按照大端位读取,0xd4c3b2a1表示按照小端位读取。(如果不清楚大小端位什么意思,请参考我的另一篇博客https://blog.csdn.net/weixin_42209881/article/details/132313717)
-
0×02 00:当前文件主要的版本号,默认就行
-
0×04 00:当前文件次要的版本号,默认就行
-
8位0这部分,前边四位表示时区,单位秒,后边四位表示时间戳的具体时间,一般都是0
-
0x00 00 04 00:表示最大的存储长度,这个文件格式是小端位,所以顺序是反的。默认设置为ff ff就够用了。
-
0x01 00 00 00:表示链路的类型,这个读出来就是1,表示以太网,这个数字要根据自己的业务去查,网上都可以查到,我提供一部分,像我自己用的FR-GPRS链路类型,这个值就是107。
-
再往后的8位表示,捕获数据包的时间,如果是手动生成的话,那就需要自己确定一个值了,
Timestamp(4B): 时间戳高位,精确到seconds,占4位。捕获数据包的时间一般是根据这个值
Timestamp(4B): 时间戳低位,能够精确到microseconds,占4位
Caplen(4B): 当前数据区的长度,即抓取到的数据帧长度,由此可以得到下一个数据帧的位置。
Len(4B): 离线数据长度,网路中实际数据帧的长度,一般不大于Caplen,多数情况下和Caplen值一样 -
0x60 00 00 00 : 表示数据区的长度,这个值就是96.
-
下来的这个0x60 00 00 00:表示离线数据区长度,一般都是和数据区长度一样长,这里也是96.
这个96,就是表示接下来的96位都是数据内容,图中我没标记出来,
然后就是下一条消息,一直循环,也是8位时间戳,再加8位的数据长度,然后是数据,一直循环。
蓝色的就是第二条消息,长度就是 0x54,就是数84位,然后就又是下一条。
这样就清楚了一个正常的pcap文件里边格式都是什么样的,下来就可以试着用代码写一个这样格式的文件就行,
代码我单独放在这篇文章中,是用Java写的,C#代码其实也可以,我就不提供了,都是一个道理,
用代码模拟抓包手动生成一个pcap文件
Java自动调用wireshark解析pcap文件并输出结果
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/40405.html