tshark 是否使用與wireshark 不同的語法?
該過濾器
!ssh
適用於wireshark,但不適用於tshark!,當我這樣做時
tshark '!ssh'
,它會抱怨過濾器,所以這裡有什麼問題?
!ssh
是一個顯示過濾器。您可以將其與tshark
like一起使用tshark -R '!ssh'
與擷取過濾器類似的效果:
tshark 'not tcp port 22'
請注意,如果您通過 ssh 執行tshark,它具有預設的擷取過濾器。
就像@jofel 在他的回答中所說的那樣,正如我在我的wireshark 初學者教程中詳細解釋的那樣- 顯示過濾器和擷取過濾器之間存在差異。
擷取過濾器
在一個非常擁擠的網路上,擷取每個數據包可能會在幾秒鐘內產生數千兆字節的數據,而且很可能其中很多對你來說根本不感興趣。
這是擷取過濾器派上用場的地方。通過定義擷取過濾器,您可以告訴 Wireshark 僅擷取網路流量的一部分。您可以按 IP 地址、IP 地址範圍、埠號、協議等進行過濾。
請注意,當您使用擷取過濾器時,不匹配的數據包將不會保存到擷取文件中。您將永遠無法恢復它們。如果您的網路不是很擁擠,最好擷取並保存所有內容,然後使用顯示過濾器僅分析感興趣的子集。
顯示過濾器**是另一回事
顯示過濾器與擷取過濾器不同。它們僅限制您目前在 wireshark 界面(或 tshark 輸出到控制台)中看到的內容 - 更高級並使用不同的語法。您可以將解析器辨識的大多數數據包欄位與各種運算符一起使用 - 比較字元串、檢查值等。
您在 Wireshark GUI 工具欄中鍵入的是顯示過濾器。我強烈建議使用它旁邊的“表達式”視窗。它是最重要和最常用的wireshark 功能之一。
您不能使用“非 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
擷取和顯示過濾器都支持的邏輯運算符。希望這是詳盡的答案,它證明了我在開始時無恥的插入是合理的:)