如何使用 Tcpdump 在 Linux 中捕獲網絡流量
Tcpdump 是用于捕獲傳入和傳出流量的網絡實用程序。這是您需要了解的有關在 Linux 上使用 tcpdump 的所有信息。
Linux 配備了大量的網絡實用程序可供選擇。tcpdump 是一種功能強大的網絡工具,如果您需要對 Linux 上的網絡錯誤進行故障排除,它可以捕獲和分析網絡流量。
讓我們動手操作 tcpdump 命令并探索如何使用它來捕獲網絡流量。
在 Linux 中安裝 tcpdump
tcpdump 通常預裝了所有主流 Linux 發行版和基于安全的替代品。因此,您應該可以通過輸入帶有sudo前綴的tcpdump來立即使用它。
如果您無法運行 tcpdump 命令并遇到“ tcpdump: command not found ”錯誤,讓我們學習如何在您的 Linux 機器上安裝 tcpdump。
要安裝 tcpdump,請啟動終端并運行與您當前使用的 Linux 發行版相對應的命令:
在 Debian/Ubuntu 衍生產品上,運行:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo apt-get install tcpdump
在基于 Arch 的系統上,運行:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo
pacman -S tcpdump
要在 Fedora、CentOS 和 RHEL 上安裝 tcpdump 實用程序,請發出以下命令:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo dnf install tcpdump
請注意,如果要求您安裝libcap,請輸入Yes或Y,因為它是核心依賴項,否則 tcpdump 將拒絕啟動。這應該安裝 tcpdump 實用程序并解決“找不到命令command not found”錯誤。
現在 tcpdump 已經安裝在您的系統上,讓我們探索它提供的不同選項和功能。
使用 tcpdump 捕獲網絡流量
tcpdump 提供了許多標志來修改其執行,但它也可以作為獨立命令運行。但是,在沒有任何標志或參數的情況下運行 tcpdump 將忽略其全部潛力。根據需要使用一些標志來調整執行和輸出總是更好的。
鍵入此命令以使用 tcpdump 監視網絡傳輸:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump
現在 tcpdump 將開始自動捕獲網絡數據包,直到使用Ctrl + Z發送中斷信號以手動中斷進程。要限制捕獲的數據包總數,請使用-c標志并在其旁邊輸入所需的數據包限制:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -c 5
如果您現在無法理解輸出,則需要先熟悉 tcpdump 輸出格式:https://www.linuxmi.com/linux-tcpdump-shili.html
使用 tcpdump 檢查可用的網絡接口
默認情況下,tcpdump 從任何可用的網絡接口捕獲流量。如果您有多個正在使用的活動網絡接口,您可能需要定義 tcpdump 應該從中捕獲數據包的網絡接口。要在特定接口上啟動 tcpdump,您必須首先了解接口名稱。
以下是使用 tcpdump 列出所有可用網絡接口的方法:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -D
或者,您可以將–list-interfaces標志添加到命令中:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump --list-interfaces
返回的輸出包含 tcpdump 可以偵聽的所有活動網絡接口的列表。要配置 tcpdump 以捕獲來自特定網絡接口的傳輸,請輸入以下命令:
sudo tcpdump -i interface_id
或者,您可以將–interface標志添加到命令中:
sudo tcpdump --interface interface_id
現在我們已經捕獲了一些數據包,讓我們仔細研究它們并了解如何調整輸出以使其更具可讀性。
探索 tcpdump 過濾器
tcpdump 能夠在一次運行中捕獲大量流量。在調查或解決特定主機或網絡協議的問題時,此類信息過載可能會使您偏離軌道。
這就是 tcpdump 過濾器發揮作用的地方。您可以在 tcpdump 命令后附加某些標志,以過濾掉網絡流量并捕獲特定數據包。然后,您可以存儲這些數據包,然后對其進行分析,以找到任何與網絡相關的問題的根源。讓我們學習如何在 tcpdump 中使用過濾器。
(1) 根據使用的網絡協議過濾數據包
要過濾通過特定協議傳輸的數據包,請使用 tcpdump 命令輸入協議名稱,它只會捕獲通過定義的網絡協議傳輸的數據包。
例如,要捕獲基于 ICMP 的數據包,您只需在 tcpdump 命令的末尾附加icmp 。如果您希望僅捕獲 UDP 或 TCP 數據包,則該過程是相同的。
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -c 3 icmp
只有通過 ICMP 協議進行數據交換時,此命令才會返回輸出。
(2) 根據主機過濾數據包
您可以配置 tcpdump 以使用host參數捕獲與單個主機相關的數據包。當您的網絡中的所有系統都在運行時,這尤其有用,除了一個。此過濾器可讓您執行有針對性的調查并加快整體故障排除工作流程,因為您不會被不必要的數據分心。
要捕獲與特定主機相關的數據包,請使用主機參數定義主機的網絡地址:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -c 3 host 192.168.174.135
與網絡協議過濾器類似,此命令僅在任何正在進行的傳輸與定義的主機相關時才返回輸出。
(3) 根據活動端口過濾數據包
tcpdump 配備了一個參數,可讓您過濾網絡流量并僅捕獲傳入或傳出特定端口的數據包。
要捕獲來自特定端口的數據包,請將端口標志附加到 tcpdump 命令并在其旁邊定義端口號。例如,要捕獲任何傳入或傳出的 HTTP 流量,請定義端口 80:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -c 3 port 80
tcpdump 將偵聽端口 80,等待 HTTP 傳輸。一旦它檢測到網絡中的 HTTP 數據包,它就會捕獲它們。
(4) 將過濾器組合在一起以進行高級排序
前幾節討論了如何根據端口、協議或主機過濾流量,但如果您想使用特定網絡協議從特定主機的單個端口捕獲流量怎么辦?好吧,您很幸運,因為這是可能的,這歸功于 tcpdump 命令使用邏輯運算符的能力。
要使用端口 443 從單個主機捕獲數據包,請使用以下命令:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -c 3 host 192.168.174.135 and port 443
檢查抓包內容
默認情況下,tcpdump 在輸出中顯示數據包的標頭。雖然在大多數情況下已經足夠了,但有時,您可能想要或需要更深入地查看捕獲的數據。您可以使用 tcpdump 命令傳遞某些參數來檢查捕獲的包的內容。
以下是查看數據包內容的方法:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -c 3 -x
此命令返回捕獲數據包中內容的十六進制版本。如果您希望查看數據的 ASCII 格式,可以使用-A參數傳遞:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -A
將 tcpdump 輸出保存到文件
與幾乎所有其他 Linux 命令行工具一樣,您可以將 tcpdump 生成的輸出存儲到文件中以供以后引用。
這可以通過在命令中添加-w標志來完成。執行后,tcpdump 會將捕獲的數據存儲到.pcap文件中,以后可以使用 tcpdump 或其他網絡監控工具(如 Wireshark)對其進行分析。
鍵入此命令以將 tcpdump 命令的輸出存儲到文件中:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -w linuxmi.pcap
要讀取.pcap文件,可以使用帶有-r參數的 tcpdump:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -r linuxmi.pcap
適用于 Linux 的最佳網絡工具
Linux 附帶了大量的網絡工具,只要它是在軟件方面,就可以解決所有網絡問題。知道如何在 Linux 中使用一些最好的網絡工具肯定會派上用場,無論您是管理網絡的系統管理員還是日常 Linux 用戶。
由于可用網絡命令的實際列表可能難以理解,因此這里列出了一些您應該知道的最重要的 Linux 網絡工具。