【问题标题】:Tshark TCP hex flags to text labelsTshark TCP 十六进制标志到文本标签
【发布时间】:2020-10-12 10:47:19
【问题描述】:

第一个问题可能会解决这个问题。在 tshark 中使用诸如“-e tcp.flags”之类的字段进行捕获时,有没有办法让输出带有标志标签,例如“FIN”,而不是“0x1”?我已经通过文档进行了一些搜索。可能就在我眼皮底下。

如果不是,那么我的数据管道中需要一个函数来将十六进制转换为标签。我想过有一个像“{'0x1':'FIN'}”这样的字典并映射它,但我不确定可能出现的所有标志组合。

所以我采用十六进制字符串,将其转换为整数,然后转换为二进制字符串。我把它变成一个列表“[0,0,0,0,0,1]”,然后像过滤器一样使用它来过滤标签列表,比如“[u, a, p, r, s, f]”,返回任何标签加入,如“f”或“a_s”。使用 Python。 这个功能有必要吗?有没有更高效/优雅的方式将十六进制转换为标签?

【问题讨论】:

    标签: tcp tshark hexdump


    【解决方案1】:

    通常我会建议使用-e tcp.flags.str,但这至少在 Windows 10 w/TShark (Wireshark) 3.3.0 (v3.3.0rc0-1433-gcac1426dd6b2) 上运行时无法正常显示。例如,这就是我得到的应该是“SYN”指示的内容:

    tshark.exe -r tcpfile.pcap -c 1 -T fields -e frame.number -e tcp.flags -e tcp.flags.str
    1       0x00000002      A·A·A·A·A·A·A·A·A·A·SA·
    

    您可以在您的系统上尝试它,也许它会按预期显示(在 Wireshark 中,它正确显示为 ··········S·,因此它可能是 tshark 错误或我的 shell 有问题 - 使用 cmd 和 powershell 进行了尝试.) 无论如何,如果它在您的系统上无法正确显示,您可以尝试使用 Didier Stevens 编写的 tcp-flags-postdissector.lua 解剖器,它受到 Snort 的启发,我相信它是构建 Wireshark 的灵感-在tcp.flags.str 字段中。我个人更喜欢一个'。而不是 '*' 用于未设置的标志位,因此我调整了 Lua 解析器以使其行为。按原样使用它,或者根据您的选择对其进行调整。使用 Lua 解析器,我得到了预期的输出:

    tshark.exe -r tcpfile.pcap -c 1 -T fields -e frame.number -e tcp.flags tcpflags.flags
    1       0x00000002      ........S.
    

    由于 cmd 和 powershell 中都显示了相同的错误字符串,所以在我看来它是一个 tshark 错误,所以我提交了Wireshark Bug 16649

    【讨论】:

    • 更新:错误 16649 已修复,但尚未向后移植到任何稳定的分支,尽管我不确定为什么不这样做。您也许可以从 wireshark.org/download/automated 下载最近的自动安装程序,但如果您的平台没有可用的安装程序,那么您要么必须自己构建 Wireshark,等待 Wireshark 3.4.0 版本发布(2020 年第三季度)每个wiki.wireshark.org/Development/LifeCycle),或请求将此错误修复程序反向移植到错误跟踪器或Wireshark开发人员邮件列表中:wireshark.org/lists
    猜你喜欢
    • 2015-06-12
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 2011-12-09
    • 1970-01-01
    • 2016-04-06
    相关资源
    最近更新 更多