inspirado por @sch aqui está uma versão do 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
o nome do arquivo será assim: stream number__time__source IP__port__destination IP__port.pcap
tr -d '\r'
é para usuários do Windows, porque o tshark no Windows gera CR LF.
Editar :
esta solução com o tshark é muito lenta, mas segura. O SplitCap é super rápido, mas quando há um erro em alguns pacotes, ele falha, enquanto o tshark apenas o informa sobre o erro, mas continua:
tshark: The file "cap.pcap" appears to have been cut short in the middle of a packet.
e finalmente há o PcapSplitter que é super rápido também, mas precisa do driver winpcap, ele não funciona com o driver npcap no Windows.
Mas existe uma solução para o SplitCap: usando o pcapfix, eu posso consertar os pacotes corrompidos e o SplitCap nunca mais falha. e é isso que estou usando agora, porque o tshark é muito lento em dividir.
e uma solução para o PcapSplitter que fiz foi injetar a dll winpcap usando qualquer método, mas enquanto temos o SplitCap, por que fazer isso?