tshark 与wireshark 使用不同的语法吗?

tshark 与wireshark 使用不同的语法吗?

该过滤器!ssh在wireshark中有效,但在tshark中无效!,

当我这样做时tshark '!ssh',它抱怨过滤器,那么这里出了什么问题呢?

答案1

简单一点的还是有区别的捕获过滤器以及更强大的显示过滤器

!ssh是一个显示过滤器。你可以使用tshark

tshark -R '!ssh'

与捕获过滤器类似的效果:

tshark 'not tcp port 22'

请注意,tshark 有默认捕获过滤器如果你通过 ssh 运行它。

答案2

就像 @jofel 在他的回答中所说,正如我在我的文章中详细解释的那样初学者的wireshark教程- 显示过滤器和捕获过滤器之间存在差异。

捕获过滤器

在非常拥挤的网络上,捕获每个数据包可能会在短短几秒钟内产生千兆字节的数据,而且很可能其中很多数据对您来说根本不感兴趣。

这是哪里捕获过滤器派上用场。通过定义捕获过滤器,您可以告诉 Wireshark 仅捕获网络流量的某些子集。您可以按 IP 地址、IP 地址范围、端口号、协议等进行过滤。

请注意,当您使用捕获过滤器时,不匹配的数据包将不会保存到捕获文件中。你将永远无法恢复它们。如果您的网络不是很拥挤,通常最好捕获并保存所有内容,然后使用显示过滤器仅分析感兴趣的子集。

这是文档捕获过滤器语法

显示过滤器**是另一个故事

显示过滤器与捕获过滤器不同。它们仅限制您当前在wireshark界面(或tshark输出到控制台)中看到的内容 - 更高级并使用不同的语法。您可以将解析器识别的大多数数据包字段与各种运算符一起使用 - 比较字符串、检查值等。

您在 Wireshark GUI 工具栏中键入的内容是显示过滤器。我强烈建议使用它旁边的“表达式”窗口。这是最重要和最常用的wireshark 功能之一。

你不能使用“not ssh”的原因捕获过滤器是捕获过滤器工作在比显示过滤器更低的级别。 Wireshark 在执行捕获过滤时并不“知道”每个数据包的协议是什么。这是由解剖者执行的更高级别的分析。

要在捕获级别过滤除 SSH 流量之外的所有内容,您必须过滤端口 22 流量,即使用"not port 22"捕获过滤器。

如果说到tshark

您可以将捕获过滤器和显示过滤器与 tshark 一起使用,但它们是不同的命令行开关选项:

捕获过滤器示例:tshark -f "not port 22"

显示过滤器示例:tshark -R "not ssh"

另一件事是你!ssh在一些流行的unix shell(如bash)上使用的感叹号具有特殊含义并由shell解释它被传递到您要执行的应用程序。您应该像这样转义它\!ssh,或者简单地使用not捕获和显示过滤器都支持的逻辑运算符。

希望这是详尽的答案,并且它证明了我一开始无耻的插入是合理的:)

相关内容