![tshark 与wireshark 使用不同的语法吗?](https://linux22.com/image/44276/tshark%20%E4%B8%8Ewireshark%20%E4%BD%BF%E7%94%A8%E4%B8%8D%E5%90%8C%E7%9A%84%E8%AF%AD%E6%B3%95%E5%90%97%EF%BC%9F.png)
该过滤器!ssh
在wireshark中有效,但在tshark中无效!,
当我这样做时tshark '!ssh'
,它抱怨过滤器,那么这里出了什么问题呢?
答案1
答案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
捕获和显示过滤器都支持的逻辑运算符。
希望这是详尽的答案,并且它证明了我一开始无耻的插入是合理的:)