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