背景

用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的。

posted on 2022-11-25 19:46  步孤天  阅读(442)  评论(0编辑  收藏  举报