【问题标题】:How to get random packets from a .pcap file?如何从 .pcap 文件中获取随机数据包?
【发布时间】:2018-04-14 12:04:55
【问题描述】:

我正在尝试从.pcap 文件中获取数据包的随机子集。为此,我编写了以下 shell 脚本:

large_number=150000
smaller_number=10000
selected_packet_numbers=$(shuf -i 0-"$large_number" -n "$smaller_number")
editcap -r capture.pcap capture-selected.pcap $selected_packet_numbers

但是,editcap 给了我以下错误:

Out of room for packet selections

使用 shell 循环会花费非常长的时间。

如何从.pcap 文件中随机选择数据包子集?

【问题讨论】:

    标签: shell wireshark pcap editcap


    【解决方案1】:

    目前,您需要减少 smaller_number,使其值严格小于 512。如果您想要更多的数据包选择,您可能必须更改 editcap.c 源中的 MAX_SELECTIONS 的值代码并自己编译。

    【讨论】:

    • 你知道我怎样才能编译only editcap.c吗?我不想编译一大堆东西只是为了改变一行。如果是,您能否将仅编译editcap.c 的步骤添加到答案中?
    • 虽然您不一定要编译所有内容,但它并不像编译单个文件那么简单。首先,您必须为您的系统设置一个开发环境,请参阅:wireshark.org/docs/wsdg_html_chunked,然后您必须通过 autotools 或 cmake 编译它。如果使用自动工具,您可能可以运行配置脚本,然后禁用除 editcap 之外的所有内容。如果使用 cmake,下一步是在构建目录中运行 msbuild,例如:“msbuild /m /p:Configuration=RelWithDebInfo editcap.vcxproj”
    • @Christopher Maynard 从我的测试中可以看出 512 个有效(这是有道理的,因为数组的长度为 512)。所以它是“小于或等于 512”。
    【解决方案2】:

    正如 Christopher Maynard 所解释的,使用 editcap 一次最多只能选择 512 个数据包。 This thread on Wireshark mailing list 有更多信息。

    如果您不想更改editcap的来源,您可以批量选择数据包。以下脚本生成 10000 个随机数,然后分批选择 512 个数据包。生成的 .pcap 文件最后合并为单个 .pcap 文件。

    #!/bin/bash
    large_number=150000
    smaller_number=10000
    selected_pkt_numbers=$(shuf -i 0-"$large_number" -n "$smaller_number")
    for j in `seq 0 512 $smaller_number`; do
        endrange=$((j+512))
        if [ "$endrange" -gt "$smaller_number" ]; then
            endrange=$smaller_number
        fi
        # Selects numbers $j to $endrange from the generated random numbers:
        echo "$j - $endrange"
        pkt_numbers=$(echo $selected_pkt_numbers | awk -v start="$j" -v end="$endrange" '{ out=""; for (i=start+1; i<=end; i++) out=out" "$i; print out}')
        editcap -r $1 $2-$j.pcap $pkt_numbers
    done
    mergecap -w $2.pcap `ls $2-*.pcap`
    

    使用它:

    $ ./pcap-random.sh input-file.pcap output-file
    0 - 512
    512 - 1024
    [...]
    9216 - 9728
    9728 - 10000
    $
    $
    $ capinfos output-file.pcap 
    File name:           output-file.pcap
    File type:           Wireshark/... - pcapng
    File encapsulation:  Ethernet
    File timestamp precision:  microseconds (6)
    Packet size limit:   file hdr: (not set)
    Packet size limit:   inferred: 58 bytes
    Number of packets:   10 k
    [...]
    

    与修改editcap 的源代码相比,该脚本的执行时间会更长。我没量过多少。使用您提供的参数,执行大约需要 11 秒。

    【讨论】:

      猜你喜欢
      • 2010-10-15
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多