zoukankan      html  css  js  c++  java
  • WireShark 自带工具 editcap 和 text2pcap 配合完成改包操作

    一、拆包

      首先声明这种方法比较复杂而且需要点技术水平,不建议菜鸟尝试(可以使用WireEdit等其他工具编辑pcap包)其实在熟练这种方法后也可以很快的,但这种方法主要还是方便吧,不用下载其他什么软件。(除了WireShark)

    不过菜鸟也不会点进这篇技术文章吧。

     

    先说主要思想

    editcap和text2pcap是WireShark自带的两款功能强大的命令行程序

    editcap是wireshark的命令行工具可以实现切割包和具体报文

    text2pcap可以根据你导出来的字符数据重新转化为数据报文

    因此我们可以先对原始包切割,切出想要的报文帧

    导出为数据字串

    修改数据字串

    再用text2pcap转回报文,这样就完成了修改工作。

     

    接下来是实际操作过程,我将把我遇到的比较复杂的例子来讲解,其他情况以此类推:

    例子是一个巨帧TCP报文,人工实现IP分片功能。

    打开CMD控制台窗口

    转到WireShark安装目录 cd C:Program FilesWireshark 找到editcap.exe和text2pcap.exe 如图

     

    接下来是官方文档editcap.html和text2pcap.html,我只截有用到的部分。

     

     

     

    首先切割文件,找到巨帧的那个报文序号,利用editcap来把pcap文件拆成三部分:巨帧报文之前的部分,巨帧报文一部分,巨帧之后部分。命令如下:

    editcap -r C:UsersAdministratorDesktopLargePcap.pcapng C:UsersAdministratorDesktopHeader.pcapng 1-31

    editcap -r C:UsersAdministratorDesktopLargePcap.pcapng C:UsersAdministratorDesktopJuZhen.pcapng  32

    editcap C:UsersAdministratorDesktopLargePcap.pcapng C:UsersAdministratorDesktopTail.pcapng 1-32

    这里的巨帧是第32条报文,长度为2974明显大于以太网帧的1500,所以你必须要处理pcap包,才能使这个包符合实际的传输过程;命令中 -r 参数是保留指定报文,不加的话是剔除指定报文。

    这里默认是pcapng格式,如果要转格式加 -F(详细见上面的说明);

    把这个包拆成两部分: 一个1514(MTU 可能不同)另一个1460。这里使用 -C 参数来剪报文内的数据。

     

     

    editcap -C -1460:1460 C:UsersAdministratorDesktopJuZhen.pcapng C:UsersAdministratorDesktop esult_1.pcapng

    editcap -C 54:1460 C:UsersAdministratorDesktopJuZhen.pcapng C:UsersAdministratorDesktop esult_2.pcapng

     

    这个语句要注意的是 offset :length offset是偏移,length是裁剪长度;还有就是要知道命令是把指定的给去除掉 (PS:我在这绕了很久)。

    二、改包

      打开result_1.pcapng和result_2.pcapng文件选中要改的报文,复制 -> as Hex Dump ,然后新建一个txt文件右键粘贴。

    我把result_1.pcapng 和 result_2.pcapng 复制到 result_1.txt、result_2.txt中

    接下来就是重中之重了 -------- 修改报文中的数据

    同时打开result.pcapng 和 result.txt,在WireShark中找到要修改的字节,对照着txt文件的相应地方改成你要的数值就行了(要注意不要改动他导出的文件格式)

    我这里的这个例子是要改动IP层的Total Length、Identification 和 Header CheckSum

    以及TCP层的Sequence Number 和 Checksum

    在txt中改掉对应的16进制,保存就完成了改包。

    三、合包

      然后使用text2pcap来合包操作,两条语句分别进行 txt Hex 转 pcapng 网络包

    text2pcap C:UsersAdministratorDesktop esult_1.txt C:UsersAdministratorDesktop1.pcapng

     

     text2pcap C:UsersAdministratorDesktop esult_2.txt C:UsersAdministratorDesktop2.pcapng

    生成1.pcapng 和 2.pcapng

     

      接下来是调整时间 ,使用 editcap -t 命令,由于不能使用精确时间来设置报文,只能 +偏移 或 -偏移来调正时间:

    editcap -t -xxxx 1.pcapng

    editcap -t -xxxx 2.pcapng

    先查看 Header.pcapng 最后一条报文准确时间 和 Tail.pcapng 第一条报文时间,在根据要调整的报文时间进行加减

    这里我就不写例子了(注意要在 Header.pcapng 最后一条报文准确时间 和 Tail.pcapng 第一条报文时间范围内)

     

    最后是合并包部分,顺序是  Header.pcapng <-  1.pcapng  <-  2.pcapng   <- Tail.pcapng

    四、结束

    放张结果图,第32和33条报文是裁剪后的结果。

    其实这种办法也不是特别麻烦吧!!不是很麻烦。。。。吧,。麻烦。好吧其实搞到这里我也没什么耐心了,这种方法我也没找到什么优点,在最后我也只是想记录一下,我挣扎的过程、学习的过程,仅此而已。

  • 相关阅读:
    斐波那契数列 的两种实现方式(Java)
    单链表反转
    单链表合并
    两个有序list合并
    list去重 转载
    RemoveAll 要重写equals方法
    Java for LeetCode 138 Copy List with Random Pointer
    Java for LeetCode 137 Single Number II
    Java for LeetCode 136 Single Number
    Java for LeetCode 135 Candy
  • 原文地址:https://www.cnblogs.com/yddsblog/p/11979437.html
Copyright © 2011-2022 走看看