zoukankan      html  css  js  c++  java
  • wireshark提取保存部分报文特定字段之tshark

      由于研究需要,用wireshark抓取了大量的modbus-tcp的数据包。由于需要对这些数据进行分析,而要分析的数据包又非常多,所以想要只分析每个报文的特定字段。

    于是在网上找wireshark如何保存报文的特定字段。有部分人的做法是“自己动手,丰衣足食” (winpcap/libpcap抓包,用程序抽取出特定字段进行分析),当然也有更简单的方法——用tshark。

    tshark相当于是wireshark的命令行版本,能实现wireshark同样的过滤以及 分析。由于是命令行,因此数据的导出更加自由,全看参数怎样配置。

    windows下,tshark在wireshark安装后的目录下,和wireshark.exe在同一目录下的还有capinfos.exe,dumpcap.exe,editcap.exe,mergecap.exe,rawshark.exe,text2pcap.exe,uninstall.exe(呵呵,没事别点这个,手贱卸载了的别找我),每个都有对应的文档,文档中给出了具体的命令行的参数和对应的功能。

    针对我的问题——过滤出每个modbus-tcp报文中的ip地址和reference_number,有两种思路:

    (1)用tshark命令行直接将相应的数据输出到文本文件,具体指令参考同一目录下的tshark.html参考文档的说明。

    命令:

    tshark -r "d:\test.pcap" -R "tcp and modbus_tcp.len==6" -n -T fields -e modbus_tcp.reference_num>"D:\test.txt"
    -r "d:\test.pcap"===>读取的原始报文文件为d盘下的test.pcap
    -R "tcp and modbus_tcp.len==6"===>报文过滤规则,相当于wireshark中的Filter部分填的内容,需要用双引号引起来。
    -n===>禁用名称解析功能
    -T fields -e modbus_tcp.reference_num===>输出部分,-T可以有几个不同的参数,fields参数代表的是字段,用-e添加显示的区域,
    -e modbus_tcp.reference_num代表在输出中加入modbus_tcp.reference_num字段,这个字段只要在wireshark中支持解析,这里就能支持。
    >"D:\test.txt"===>将输出重定向到D盘test.txt下。

    (2)用tshark或wireshark将数据输出到xml,再处理xml。

    因为有时候用第一种方式并不能显示所有的数据,比如非文本的

      [2.1]tshark中输出到xml方式,参数中添加-T pdml  (pdml:pdml Packet Details Markup Language)。

    用wireshark更简单,File>Export>File>保存类型选择PDML,Packet Range选择Displayed,All Packets,即保存得到xml格式的数据。

      [2.2]从得到的xml中提取出想要的数据。这里又有很多不同的处理方式。

      如果仅仅是为了分析,数据量又不大,直接分析特定字段,用带xml分析的软件查看即可,如UltraEdit自带的xml分析功能。

    当然这个用处不大,和wireshark本身的分析功能没什么区别。

    因此用程序读取xml文件比较合适,可以用C++结合各自xml的库,比如tinyxml,或者用python,写程序提取出xml中想要的字段,前面的UlterEdit可以作为程序编写时xml结构的辅助参考工具。

    自己写程序灵活性就很大了,与直接冲plain text开始,写程序过滤相比,相当于可以利用wireshark自带的数据解析功能先对数据进行预解析,这样只要解析xml就好了,不再需要考虑繁杂的字段过滤,算偏移地址之类的,减少了编程的工作量,何乐而不为?

    条条大路通罗马,不管怎样,问题都有解决的方法,就看你喜欢哪种处理方式了。

  • 相关阅读:
    mysql8.0.x中datasource信息
    IDEA关联mysql失败Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezon'
    SpringSecurity配置文件
    druid监控
    Redis安装教程
    一个简单的springboot+mybatis-plus+thymeleaf的学生管理系统
    RestFul风格
    Vue利用v-for渲染时表单信息出不来
    springboot项目Invalid bound statement (not found): com.xxxx.dao.xxxDAO.xxx解决方法
    JSON
  • 原文地址:https://www.cnblogs.com/followyourheart/p/2770575.html
Copyright © 2011-2022 走看看