【问题标题】:How to convert hex dump from 4 hex digit groups to 2 hex digit groups如何将十六进制转储从 4 个十六进制数字组转换为 2 个十六进制数字组
【发布时间】:2018-01-03 17:18:46
【问题描述】:

如果我有以下文本格式的数据包捕获,这是 fortigate 或 fortimail 中的 cli 数据包捕获

FortiMail # diag sniffer packet port1 'tcp port 443' 3
interfaces=[port1]
filters=[tcp port 443]
10.651905 192.168.0.1.50242 -> 192.168.0.2.443: syn 761714898
0x0000 0009 0f09 0001 0009 0f89 2914 0800 4500 ..........)...E.
0x0010 003c 73d1 4000 4006 3bc6 d157 fede ac16 .<s.@.@.;..W....
0x0020 0ed8 c442 01bb 2d66 d8d2 0000 0000 a002 ...B..-f........
0x0030 16d0 4f72 0000 0204 05b4 0402 080a 03ab ..Or............
0x0040 86bb 0000 0000 0103 0303 ..........

如何将其转换为这种格式,以便能够使用 text2pcap 将其转换为 pcap。所以可以在wireshark轻松打开。

FortiMail # diag sniffer packet port1 'tcp port 443' 3
interfaces=[port1]
filters=[tcp port 443]
10.651905 192.168.0.1.50242 -> 192.168.0.2.443: syn 761714898
0000 00 09 0f 09 00 01 00 09 0f 89 29 14 08 00 45 00 ..........)...E.
0010 00 3c 73 d1 40 00 40 06 3b c6 d1 57 fe de ac 16 .<s.@.@.;..W....
0020 0e d8 c4 42 01 bb 2d 66 d8 d2 00 00 00 00 a0 02 ...B..-f........
0030 16 d0 4f 72 00 00 02 04 05 b4 04 02 08 0a 03 ab ..Or............
0040 86 bb 00 00 00 00 01 03 03 03 ..........

【问题讨论】:

  • 你知道初始格式,想要的格式,那有什么问题呢?您可以使用最喜欢的编程语言编写自己的工具,或使用支持正则表达式的文本编辑器进行智能文本调整。或者使用支持宏的文本编辑器在多行上应用相同的操作。

标签: linux wireshark


【解决方案1】:

在旧的 Wireshark Ask Q&A 网站上提出并回答了一个 非常 类似的问题。 Here 是该问题的链接,为方便起见,我的答案逐字逐句发布在下面:


是的,您可以使用text2pcap 将其转换为pcap 文件,但您首先需要将数据转换为text2pcap 接受的格式,因为text2pcap 目前不支持所描述的格式。

首先,您可以使用Kurt Knochner 的perl 脚本将数据转换为合适的格式,该脚本是this 问题的答案,为方便起见复制到此处:

#!/usr/bin/perl

$| = 1;

my $regexp_time = '(\d\d:\d\d:\d\d\.\d+ )';
my $regexp_hex = '(0x\d+:\s+)([0-9a-f ]+)+  ';

while (<STDIN>) {

   my $input = $_;

   if ($input =~ /^$regexp_time/) {
      print "$1\n";
   }

   if ($input =~ /$regexp_hex/) {
      my $counter = $1;
      my $line = $2;

      $line =~ s/ //g;
      $counter =~ s/(0x|:)//g;

      print $counter . join(' ', ( $line =~ m/../g )) . "\n";
   }
}

假设tcpdump的输出保存在一个名为tcpdump.txt的文件中,并且Kurt的perl脚本保存为convert.pl,运行:

cat tcpdump.txt | convert.pl > tcpdump_converted.txt

完成后,在转换后的文件上运行text2pcap

text2pcap -l 101 tcpdump_converted.txt tcpdump_converted.pcap

请注意,这里我指定了 "Raw IP" 封装。链接类型见http://www.tcpdump.org/linktypes.html


我知道您的输出不是从 tcpdump 生成的,因此脚本可能无法像您的情况那样完全工作,但也不应该如此如果它不能满足您开箱即用的需求,则很难对其进行定制以满足您的需求。

【讨论】:

    【解决方案2】:

    我通过 2 个 VIM 替换命令解决了这个问题

    这个将所有 4 位十六进制替换为 2 位十六进制

    %s/\s\([0-9a-f]\{2}\)\([0-9a-f]\{2}\)/ \1 \2 /g
    

    这个从行首删除 0x

    %s/^0x//
    

    然后运行:

     text2pcap in-mod.txt out.pcap
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-19
      • 2018-01-22
      • 2016-12-18
      • 2015-01-26
      • 1970-01-01
      相关资源
      最近更新 更多