![Wireshark:当一个数据包可以匹配多次时,计算过滤器匹配的次数](https://linux22.com/image/1538613/Wireshark%EF%BC%9A%E5%BD%93%E4%B8%80%E4%B8%AA%E6%95%B0%E6%8D%AE%E5%8C%85%E5%8F%AF%E4%BB%A5%E5%8C%B9%E9%85%8D%E5%A4%9A%E6%AC%A1%E6%97%B6%EF%BC%8C%E8%AE%A1%E7%AE%97%E8%BF%87%E6%BB%A4%E5%99%A8%E5%8C%B9%E9%85%8D%E7%9A%84%E6%AC%A1%E6%95%B0.png)
我有一个 SCTP 流量的 pcap 和一个与某些数据包中的有效负载匹配的筛选子句。我想计算有多少这样的有效负载。但是,有些数据包包含多个有效负载(Nagle 算法),因此它们可能与筛选器匹配两次或更多次。因此,我只能从筛选然后检查匹配数据包的数量中获得下限。
Wireshark 中是否有办法计算过滤器匹配的总数而不是与过滤器匹配的数据包的数量?
答案1
更新:鉴于下面提供的过滤表达式,即s1ap.procedureCode eq 9
,CLI 解决方案可能应该修改为如下所示:
tshark -r file.pcap -Y "s1ap.procedureCode eq 9" -T fields -e s1ap.procedureCode | sed 's/,/\n/g' | grep "^9" | wc -l
经过grep
英具体来说,对于 9,您不会计算s1ap.procedureCode
同一个数据包中包含除 9 之外的其他值的行,但您仍然会计算所有出现的 9,即使在同一个数据包中出现多个 9。
在这种情况下,我认为 I/O Graph 方法不会可靠地工作,因为您只能计算字段,但您只想计算字段的特定值。
原来的答案如下,其中我没有关于所需显示过滤器表达式的信息。
如果您的 SCTP 过滤器代表 SCTP 字段,那么我能想到的最简单的方法是使用命令行工具,例如tshark
,sed
和wc
。 例如:
tshark -r file.pcap -Y "sctp.filter" -T fields -e frame.number -e sctp.filter | sed 's/,/\n/g' | wc -l
注意:用您选择的 SCTP 显示过滤器替换 sctp.filter。
如果你真的想使用Wireshark,那么你能通过使用 I/O Graph 来实现这一点,但在我看来,它和 CLI 解决方案一样好。对于我的测试,我做了以下事情来产生与上面得到的答案相同的结果:
从“统计 -> I/O 图表 -> ‘+’:
- 输入图表的任意名称
- 输入您的显示过滤器
- 将 Y 轴更改为“
COUNT FIELDS (Y Field)
” - 在 Y 字段中再次输入显示过滤器
- 确保勾选启用图表
- 禁用所有其他图表
- 将间隔设置为 10 分钟(最大值)
- 选择复制
- 将数据粘贴到电子表格程序中
如果数据包的持续时间少于 10 分钟,您将获得一个标题和一个条目,该条目将是过滤器的出现次数,与数据包数量无关。如果数据包的持续时间超过 10 分钟,则需要对出现次数进行求和以获得总数。
最后,如果您的 SCTP 过滤器不仅仅是一个 SCTP 字段,而是一个更复杂的构造,那么我不确定如何解决这个问题,但发布您的确切过滤器可能会帮助我(或其他人)想出解决方案。