如何使用 tcpdump 在 Linux 上捕獲網絡流量

Linux 配備了大量的網絡實用程序可供選擇。 tcpdump 是強大的網絡工具之一,可以捕獲和分析網絡流量,以防您需要對 Linux 上的網絡錯誤進行故障排除。

讓我們動手操作 tcpdump 命令並探索如何使用它來捕獲網絡流量。

在 Linux 上安裝 tcpdump

tcpdump 通常預裝了所有主要的 Linux 發行版和基於安全的替代品。 因此,您應該可以通過鍵入立即使用它tcp 轉儲有一個 sudo 字首。

如果您無法運行 tcpdump 命令並卡在“tcpdump:找不到命令” 錯誤,讓我們學習如何在您的 Linux 機器上安裝 tcpdump。

要安裝 tcpdump,請啟動終端並運行與您當前使用的 Linux 發行版對應的命令:

在衍生物Debian/Ubuntu, 跑:

                      
                        sudo apt-
                        
                          get
                        
                         install tcpdump
                      
                    

在基於 Arch 的系統上,運行:

                      
                        sudo pacman -S tcpdump
                        

要在 FedoraCentOS 和 RHEL 上安裝 tcpdump 實用程序,請發出以下命令:

                      
                        sudo dnf 
                        
                          install
                        
                         tcpdump
                      
                    

請注意,如果系統提示您安裝書店來寫是的任何一個是的因為它是一個核心依賴,沒有它 tcpdump 將拒絕啟動。 這應該安裝 tcpdump 實用程序並解決“找不到命令”錯誤。

現在 tcpdump 已經安裝在您的系統上,讓我們探索它提供的不同選項和功能。

使用 tcpdump 捕獲網絡流量

tcpdump 提供了許多標誌來修改其執行,但也可以作為獨立命令運行。 但是,在沒有任何標誌或參數的情況下運行 tcpdump 將浪費其全部潛力。 根據需要使用一些標誌來修改執行和輸出總是更好的。

鍵入此命令以使用 tcpdump 監視網絡傳輸:

                      
                        sudo tcpdump
                      
                    

現在 tcpdump 將開始自動捕獲網絡數據包,直到發送中斷信號控制 + Z手動中斷進程。 要限制捕獲的數據包總數,請使用-C檢查並在其旁邊寫下所需的軟件包限制:

                      
                        sudo tcpdump -c 5
                      
                    

如果此時還看不懂輸出,首先應該熟悉一下 tcpdump 的輸出格式。

使用 tcpdump 檢查可用的網絡接口

默認情況下,tcpdump 從任何可用的網絡接口捕獲流量。 如果您有多個正在使用的活動網絡接口,您可能需要定義 tcpdump 應該從中捕獲數據包的網絡接口。 要在特定接口上啟動 tcpdump,您首先需要知道接口的名稱。

以下是使用 tcpdump 列出所有可用網絡接口的方法:

                      
                        sudo tcpdump -D
                      
                    

或者您可以添加--接口列表標誌命令:

                      
                        sudo tcpdump --
                        
                          list
                        
                        -interfaces
                      
                    

返回的結果包含 tcpdump 可以偵聽的所有活動網絡接口的列表。 要配置 tcpdump 以捕獲來自特定網絡接口的傳輸,請鍵入以下命令:

                      
                        sudo tcpdump -i interface_id
                      
                    

或者您可以添加-界面標誌命令:

                      
                        sudo tcpdump --
                        
                          
                            interface
                          
                          
                            interface_id
                          
                        
                      
                    

現在我們已經捕獲了一些數據包,讓我們仔細看看它們並了解如何修改輸出以使其更具可讀性。

探索 tcpdump 過濾器

tcpdump 能夠在一次運行中捕獲大量流量。 在調查或解決特定主機或網絡協議的問題時,此類信息過載可能會導致您誤入歧途。

這就是 tcpdump 過濾器發揮作用的地方。 您可以添加帶有某些標誌的 tcpdump 命令來過濾網絡流量並捕獲特定數據包。 然後,您可以存儲這些數據包,然後分析它們以找到任何與網絡相關的問題的根源。 讓我們學習如何在 tcpdump 中使用過濾器。

根據使用的網絡協議過濾數據包

要過濾通過特定協議傳輸的數據包,請使用 tcpdump 命令鍵入協議名稱,它只會捕獲通過定義的網絡協議傳輸的數據包。

例如,要捕獲基於 ICMP 的數據包,我只需附加ICMP在 tcpdump 命令的末尾。 無論您只想捕獲 UDP 還是 TCP 數據包,該過程都是相同的。

                      
                        sudo tcpdump -c 5 icmp
                      
                    

只有通過 ICMP 協議進行數據交換時,此命令才會返回輸出。

根據主機過濾數據包

您可以配置 tcpdump 以捕獲與單個主機相關的數據包主持人範圍。 當您的網絡上除了一個系統之外的所有系統都在工作時,這尤其有用。 此過濾器允許您執行特定調查並加快整體故障排除工作流程,因為您不會被不必要的數據分心。

要捕獲與特定主機相關的數據包,請使用主持人範圍:

                      
                        
                          sudo
                        
                        
                          tcpdump
                        
                        
                          -c
                        
                         5 
                        
                          host
                        
                         192
                        
                          .168
                        
                        
                          .2
                        
                        
                          .1
                        
                      
                    

與網絡協議過濾器類似,此命令僅在任何正在進行的傳輸與定義的主機相關時才返回輸出。

根據活動端口過濾數據包

tcpdump 配備了一個參數,允許它過濾網絡流量並僅捕獲傳入或傳出特定端口的數據包。

要捕獲來自特定端口的數據包,請添加港口標記 tcpdump 命令並在其旁邊定義端口號。 例如,要捕獲任何傳入或傳出的 HTTP 流量,請定義端口 80:

                      
                        sudo tcpdump -c 5 port 80
                        

tcpdump 將偵聽端口 80,等待 HTTP 傳輸。 一旦它檢測到網絡上的 HTTP 數據包,它就會捕獲它們。

組合過濾器以進行高級排序

前面的部分討論瞭如何根據端口、協議或主機過濾流量,但是如果您想使用特定網絡協議從特定主機的單個端口捕獲流量怎麼辦? 好吧,您很幸運,因為這是可能的,將其歸因於通過 tcpdump 命令使用邏輯運算符的能力。

要使用端口 443 從單個主機捕獲數據包,請使用以下命令:

                      
                        
                          sudo
                        
                        
                          tcpdump
                        
                        
                          -c
                        
                         5 
                        
                          host
                        
                         192
                        
                          .168
                        
                        
                          .2
                        
                        
                          .1
                        
                        
                          and
                        
                        
                          port
                        
                         443
                        

檢查捕獲的數據包的內容

默認情況下,tcpdump 在輸出中顯示數據包的標頭。 雖然這在大多數情況下已經綽綽有餘,但有時您可能想要或需要更深入地挖掘捕獲的數據。 您可以使用 tcpdump 命令傳遞某些參數來檢查捕獲的數據包的內容。

以下是查看包內容的方法:

                      
                        sudo tcpdump -c 5 -x
                      
                    

此命令返回捕獲的數據包內容的十六進製版本。 如果要查看數據的 ASCII 格式,可以通過-一個參數:

                      
                        sudo tcpdump -A
                      
                    

將 tcpdump 輸出保存到文件

與幾乎所有其他 Linux 命令行工具一樣,您可以將 tcpdump 生成的輸出存儲在稍後將引用的文件中。

這可以通過添加-w命令上的標誌。 執行後,tcpdump 會將捕獲的數據存儲在一個.pcap然後可以使用 tcpdump 或其他網絡監控工具(如 Wireshark)對其進行分析。

鍵入此命令以將 tcpdump 命令的輸出存儲到文件中:

                      
                        
                          sudo
                        
                        
                          tcpdump
                        
                        
                          -w
                        
                        
                          capture
                        
                        
                          .pcap
                        
                      
                    

讀一個.pcap文件,您可以將 tcpdump 與-r範圍:

                      
                        
                          sudo
                        
                        
                          tcpdump
                        
                        
                          -r
                        
                        
                          capture
                        
                        
                          .pcap
                        
                      
                    

適用於 Linux 的最佳網絡工具

Linux 附帶了大量的網絡工具,可以解決您所有的網絡問題,只要它與軟件有關。 知道如何使用一些最好的 Linux 網絡工具肯定會派上用場,無論你是一個以管理網絡為生的系統管理員,還是一個普通的 Linux 用戶。

由於可用網絡命令的實際列表可能難以理解,因此這裡列出了一些您應該了解的最重要的 Linux 網絡工具。

相關文章