вдохновленный @sch вот версия bash:
file=cap.pcap
$tshark -Tfields -e tcp.stream \
-e frame.time_epoch \
-e ip.src \
-e tcp.srcport \
-e ip.dst \
-e tcp.dstport -r $file |
sort -snu |
while read -a f; do
[[ "${f[5]}" ]] || continue # sometimes there is no stream number ex. UDP
fileout=$(echo ${f[0]}__${f[1]}__${f[2]}__${f[3]}__${f[4]}__${f[5]} | tr -d '\r' )
$tshark -r $file -2R "tcp.stream == ${f[0]}" -w "$fileout.pcap"
done
read
имя файла будет таким: stream number__time__source IP__port__destination IP__port.pcap
tr -d '\r'
предназначен для пользователей Windows, потому что Tshark в Windows выводит CR LF.
Редактировать :
это решение с tshark такое медленное, но уверенное. SplitCap работает очень быстро, но при возникновении ошибки в каком-либо пакете происходит сбой, а tshark только сообщает вам об ошибке, но продолжает:
tshark: The file "cap.pcap" appears to have been cut short in the middle of a packet.
и, наконец, есть PcapSplitter, который тоже очень быстрый, но ему нужен драйвер winpcap, он не работает с драйвером npcap в windows.
Но есть решение для SplitCap: используя pcapfix, я могу исправить поврежденные пакеты, тогда SplitCap больше никогда не падает. и это то, что я сейчас использую, потому что tshark очень медленно расщепляется.
и решение PcapSplitter, которое я сделал, заключалось в том, чтобы внедрить dll winpcap любым методом, но пока у нас есть SplitCap, зачем это делать?