Как получить случайные пакеты из файла.pcap?

Я пытаюсь получить случайное подмножество пакетов из .pcap файл. Для этого я написал следующий скрипт:

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

Использование цикла оболочки займет неоправданно много времени.

Что я могу сделать, чтобы выбрать случайное подмножество пакетов из .pcap файл?

2 ответа

В настоящее время вам нужно будет уменьшить smaller_number поэтому его значение строго меньше 512. Если вы хотите больше пакетов, чем это, вам, вероятно, придется изменить значение MAX_SELECTIONS в исходном коде editcap.c и скомпилируйте его самостоятельно.

Как объяснил Кристофер Мейнард, с помощью editcap вы можете выбрать не более 512 пакетов одновременно. Эта тема в списке рассылки Wireshark содержит немного больше информации.

Если вы не хотите изменять источники 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 секунд для выполнения.

Другие вопросы по тегам