pcap文件格式及其大文件切割——C语言

一、Pcap文件格式以及变量类型的选取

   这些有很多前辈已经介绍过了,这里就不赘述了。可以参考前辈们的文章,这里推荐两个。

        https://www.cnblogs.com/caoguoping100/p/3658792.html

        https://blog.csdn.net/jackyzhousales/article/details/78032054

二、C语言进行文件切割

   重点来了,直接上exe以及测试文件(已压缩完,可直接试用程序。)下载链接:

       链接:https://pan.baidu.com/s/1yxswxS1bELxwHfxV9UMN3Q

       提取码:hh9i

    简单讲解一下程序,程序的主要功能就是将较大pcap文件切割成wireshark较容易打开的一个个小文件(小文件数量可以人为确定)。

    程序主要分为三个部分:

  (1)计算待切割文件大小

  (2)切割文件头

  (3)切割数据包头,创建并打开待写入文件将文件头、数据包头和数据写入

    程序的较难点就在于怎么记录每次切割的位置、怎么计算出已经切割和输入了多少数据。

     void GetPcapFileData(FILE* Functionfp)函数用于将文件头切割出来存储在全局变量中,因为一个pcap大文件只有一个文件头,我们只需要保存一个文件头然后将切割出的文件头分配给每个小文件就可以保证wireshark正确读取。根据前辈们的研究定义一个结构体(在头文件中)。

      void GetPcapIndividualHeader(FILE* tp,FILE* tp2)函数用于将数据包头和数据切割出来放入tp2指向的文件中。这里需要用结构体解析出数据包头中描述数据部分大小的值。在我的程序中ph结构体用于存储数据包头,存储数据部分大小的变量是ph.capture_len。

      主函数部分使用sprintf函数循环创建所需小文件,每次for循环都创建一个新文件,在for循环中使用while循环来执行GetPcapIndividualHeader函数。在执行GetPcapIndividualHeader之前先将切割出的文件头存进去。SizeofFile/FileNumber是根据文件大小和所需切割的小文件数量计算出的每个小文件大约是多少字节。GetPcapIndividualHeader循环执行完以后,文件偏移指针会指向第一个小文件中最后一个数据包的下一个数据包包头,这时候的文件偏移指针减去一开始执行while循环时的文件偏移指针的值就是这次while循环切割出的第一个小文件的大小(单位为byte)。循环的结束判断使用ftell函数获取待切割文件每次的文件偏移指针位置,如果大于等于SizeofFile,说明已全部切割完成,程序完成。

      这个程序只是一个简单的版本,没有进行用户优化,也没有做输入流的错误检测,所以可能会出现一些错误,之后有需要的话可能会做一些优化。但是正常切割应该是可以进行的。如果遇到什么问题或者有什么想法可以通过2772672879@qq.com联系我。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值