背景
用wireshark windows版本把视频流保存出来,结果只有抓包的一半,另一半丢失了。
为了验证是视频流的问题还是wireshark的问题。不得已,研究起了tshark,最终确定wireshark 400MB抓包文件的前200MB。
tshark是可以在linux命令行中运行的wireshark工具,分析tcpdump抓的包非常方便,但如果抓的包是视频流,需要把视频流保存出来应该怎么办?
原生的命令是没有的。(也不知道有没有,反正是搜了一下午都没找到)
"-w"命令是把一种抓包文件输出成另一种抓包文件;
"-z"相当于wireshark的追踪流,但是没有另存为选项;
解决方案
用脚本
参考:https://osqa-ask.wireshark.org/questions/53747/scripting-follow-tcp-stream-save-as-raw/
也就是下面的脚本:
infile=in.pcap
outfile=out
ext=txt
for stream in $(tshark -nlr $infile -Y tcp.flags.syn==1 -T fields -e tcp.stream | sort -n | uniq | sed 's/\r//')
do
echo "Processing stream $stream: ${outfile}_${stream}.${ext}"
tshark -nlr $infile -qz "follow,tcp,raw,$stream" | tail -n +7 | sed 's/^\s\+//g' | xxd -r -p > ${outfile}_${stream}.${ext}
done
但我知道流信息,所以就简化成了
infile=222.cap
outfile=out
ext=ts
stream=0
echo "Processing stream $stream: ${outfile}_${stream}.${ext}"
tshark -nlr $infile -qz "follow,tcp,raw,$stream" | tail -n +7 | sed 's/^\s\+//g' | xxd -r -p > ${outfile}_${stream}.${ext}
不过tshark应该也不完善,10分钟的视频流,wireshark保存了5分钟的,tshark保存了9分钟的,最终确定wireshark追踪400MB的流文件只能保存前200MB的。
转载请注明来源:https://www.cnblogs.com/bugutian/