Как получить случайные пакеты из файла.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 секунд для выполнения.