如何删除Wireshark中的零数据包(空流)记录

时间:2018-07-17 12:12:11

标签: wireshark

我对Wireshark非常陌生。在我的日常工作中,我需要从捕获的PCAP文件中删除数据包字节零记录。请在这个过程中帮助我。所附图片仅供参考

wireshark packets zero.png

2 个答案:

答案 0 :(得分:0)

由于您要删除47个TCP流,而要删除28个,因此对于要保留的所有TCP流进行过滤可能会更快一些,因为其中只有19个。

对于您想要的19个流:

  • 右键单击第一个TCP对话,然后选择“准备过滤器->选定的-> A <-> B”
  • 对于接下来的17个TCP对话,右键单击每个对话,然后选择“准备过滤器-> ...并选择-> A <-> B”
  • 最后,对于最后一个TCP流,右键单击TCP对话,然后选择“应用为过滤器-> ...并选择-> A <-> B” 。 li>

您可能希望通过“文件->导出指定的数据包...->所有数据包:已显示” 将生成的已过滤数据包导出到新文件中,因此不必继续过滤那些流了。

答案 1 :(得分:0)

如果您要过滤大量流,那么最好编写一些脚本。这是一个您可以使用的脚本,该脚本在我的Linux机器上进行测试时似乎效果很好。如果您使用的是Windows,则需要编写一个等效的批处理文件,或者如果您已安装Cygwin,则可以按原样使用它。

#!/bin/sh
# Check usage
if [ ${#} -lt 2 ] ; then
        echo "Usage: $0 <infile> <outfile>"
        exit 0
fi

infile=${1}
outfile=${2}

# TODO: Could also pass the filter on the command-line too.
filter="ip.dst eq 192.168.10.44 and tcp.len > 0"

stream_filter=
for stream in $(tshark -r ${infile} -Y "${filter}" -T fields -e tcp.stream | sort -u | tr -d '\r')
do
        if [[ -z ${stream_filter} ]] ; then
                stream_filter="tcp.stream eq ${stream}"
        else
                stream_filter+=" or tcp.stream eq ${stream}"
        fi
done

tshark -r ${infile} -Y "${stream_filter}" -w ${outfile}
echo "Wrote ${outfile}"