You can just use tshark
like,
$ tshark -r <pcapfile> -Y "frame.number >= 3 && frame.number <= 5" -w <output-pcapfile>
Eg:-
$ tshark -r mae1_799.pcap -Y "frame.number >= 3 && frame.number <= 5"
3 0.000426 192.168.31.86 → 192.168.31.55 SCTP 64 SACK
4 0.011255 192.168.60.55 → 192.168.201.55 TCP 68 80 → 53917 [ACK] Seq=1 Ack=1 Win=237 Len=0 TSval=3820568953 TSecr=1221428662
5 0.015323 192.168.12.3 → 192.168.12.2 SCTP 76 HEARTBEAT
You can write to a new file using the -w
option,
$ tshark -r mae1_799.pcap -Y "frame.number >= 3 && frame.number <= 5" -w new.pcap
And make sure you have the required packets,
$ tcpdump -r new.pcap
reading from file new.pcap, link-type LINUX_SLL (Linux cooked)
10:22:00.076746 IP 192.168.31.86.2905 > 192.168.31.55.2905: sctp (1) [SACK] [cum ack 661849925] [a_rwnd 102400] [#gap acks 0] [#dup tsns 0]
10:22:00.087575 IP 192.168.60.55.http > 192.168.201.55.53917: Flags [.], ack 1035058538, win 237, options [nop,nop,TS val 3820568953 ecr 1221428662], length 0
10:22:00.091643 IP 192.168.12.3.2009 > 192.168.12.2.2008: sctp (1) [HB REQ]
As of Wireshark 2.6.0 Release, you can use the membership operator for range like frame.number in {start..end}
,
$ tshark -r mae1_799.pcap -Y "frame.number in {3..5}"
3 0.000426 192.168.31.86 → 192.168.31.55 SCTP 64 SACK
4 0.011255 192.168.60.55 → 192.168.201.55 TCP 68 80 → 53917 [ACK] Seq=1 Ack=1 Win=237 Len=0 TSval=3820568953 TSecr=1221428662
5 0.015323 192.168.12.3 → 192.168.12.2 SCTP 76 HEARTBEAT
Write to a file:
$ tshark -r mae1_799.pcap -Y "frame.number in {3..5}" -w new.pcap