Linux 上使用 tcpdump 的六個(gè)示例
您是否正在嘗試捕獲數(shù)據(jù)包以分析網(wǎng)絡(luò)上的流量?也許您是一名服務(wù)器管理員,遇到了問題并想要監(jiān)控網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)。無論情況如何,tcpdump Linux 實(shí)用程序都是您所需要的。
在本文中,我們將詳細(xì)討論 tcpdump 命令,以及一些有關(guān)如何在 Linux 系統(tǒng)上安裝和使用 tcpdump 的指南。
什么是 tcpdump 命令?
Tcpdump 是一個(gè)強(qiáng)大的網(wǎng)絡(luò)監(jiān)控工具,它允許用戶有效地過濾網(wǎng)絡(luò)上的數(shù)據(jù)包和流量。您可以獲得有關(guān) TCP/IP 和網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)包的詳細(xì)信息。Tcpdump 是一個(gè)命令行實(shí)用程序,這意味著您可以在沒有顯示的 Linux 服務(wù)器上運(yùn)行它。
系統(tǒng)管理員還可以將 tcpdump 實(shí)用程序與cron集成,以便自動(dòng)執(zhí)行各種任務(wù),例如日志記錄。由于其眾多功能使其非常通用,因此 tcpdump 既可以用作故障排除工具,也可以用作安全工具。
如何在 Linux 上安裝 tcpdump
雖然大多數(shù)時(shí)候您會(huì)發(fā)現(xiàn) tcpdump 預(yù)裝在您的系統(tǒng)上,但某些 Linux 發(fā)行版并未隨附該軟件包。因此,您可能必須在系統(tǒng)上手動(dòng)安裝該實(shí)用程序。
您可以使用which命令檢查系統(tǒng)上是否安裝了 tcpdump 。
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ which tcpdump
如果輸出顯示目錄路徑 ( /usr/bin/tcpdump ),則您的系統(tǒng)已安裝該軟件包。但是,如果沒有,您可以使用系統(tǒng)上的默認(rèn)包管理器輕松完成。
要在基于 Debian 的發(fā)行版(例如 Ubuntu)上安裝 tcpdump:
┌──(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í)用程序,請(qǐng)發(fā)出以下命令:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo dnf install tcpdump
請(qǐng)注意,tcpdump 包需要libcap作為依賴項(xiàng),因此請(qǐng)確保您也將其安裝在系統(tǒng)上。
在 Linux 上捕獲網(wǎng)絡(luò)數(shù)據(jù)包的 Tcpdump 示例
現(xiàn)在您已經(jīng)在 Linux 機(jī)器上成功安裝了 tcpdump,是時(shí)候監(jiān)控一些數(shù)據(jù)包了。由于 tcpdump 需要超級(jí)用戶權(quán)限才能執(zhí)行大多數(shù)操作,因此您必須將sudo添加到您的命令中。
1. 列出所有網(wǎng)絡(luò)接口
要檢查哪些網(wǎng)絡(luò)接口可用于捕獲,請(qǐng)?jiān)?tcpdump 命令中使用-D標(biāo)志。
tcpdump -D
將–list-interfaces標(biāo)志作為參數(shù)傳遞將返回相同的輸出。
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump --list-interfaces
輸出將是系統(tǒng)上存在的所有網(wǎng)絡(luò)接口的列表。
獲得網(wǎng)絡(luò)接口列表后,是時(shí)候通過捕獲系統(tǒng)上的數(shù)據(jù)包來監(jiān)控網(wǎng)絡(luò)了。盡管您可以指定要使用的接口,但any參數(shù)命令 tcpdump 使用任何活動(dòng)接口捕獲網(wǎng)絡(luò)數(shù)據(jù)包。
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump --interface any
系統(tǒng)將顯示以下輸出。
2. tcpdump 輸出格式
從第三行開始,輸出的每一行表示 tcpdump 捕獲的特定數(shù)據(jù)包。這是單個(gè)數(shù)據(jù)包的輸出的樣子。
16:23:44.545056 eth0 Out IP linuxmi.40016 > 120.253.255.102.https: Flags [P.], seq 1007723650:1007723689, ack 1485464298, win 62780, length 39
請(qǐng)記住,并非所有數(shù)據(jù)包都以這種方式捕獲,但這是大多數(shù)數(shù)據(jù)包遵循的一般格式。
輸出包含以下信息:
- 接收數(shù)據(jù)包的時(shí)間戳
- 接口名稱
- 包流
- 網(wǎng)絡(luò)協(xié)議名稱
- IP 地址和端口詳細(xì)信息
- TCP 標(biāo)志
- 數(shù)據(jù)包中數(shù)據(jù)的序號(hào)
- 確認(rèn)數(shù)據(jù)
- 窗口大小
- 數(shù)據(jù)包長(zhǎng)度
第一個(gè)字段 ( 16:23:44.545056 ) 顯示系統(tǒng)發(fā)送或接收數(shù)據(jù)包時(shí)的時(shí)間戳。記錄的時(shí)間是從您系統(tǒng)的本地時(shí)間中提取的。
第二個(gè)和第三個(gè)字段表示使用的接口和數(shù)據(jù)包的流向。在上面的代碼片段中,eth0是無線接口的名稱,Out是數(shù)據(jù)包流。
第四個(gè)字段包括與網(wǎng)絡(luò)協(xié)議名稱有關(guān)的信息。通常,您會(huì)發(fā)現(xiàn)兩種協(xié)議- IP和IP6,其中 IP 表示 IPV4,IP6 表示 IPV6。
下一個(gè)字段包含 IP 地址或源和目標(biāo)系統(tǒng)的名稱。IP 地址后跟端口號(hào)。
輸出中的第六個(gè)字段由 TCP 標(biāo)志組成。tcpdump 輸出中使用了各種標(biāo)志。
標(biāo)志名稱 | 值 | 描述 |
SYN | S | 連接開始 |
FIN | F | 連接完成 |
PUSH | O | 數(shù)據(jù)被推送 |
RST | R | 連接已重置 |
ACK | . | 確認(rèn) |
輸出還可以包含多個(gè) TCP 標(biāo)志的組合。例如,F(xiàn)LAG [f.]代表一個(gè) FIN-ACK 包。
在輸出片段中進(jìn)一步移動(dòng),下一個(gè)字段包含數(shù)據(jù)包中數(shù)據(jù)的序列號(hào) ( seq 1007723650:1007723689 )。第一個(gè)數(shù)據(jù)包總是有一個(gè)正整數(shù)值,隨后的數(shù)據(jù)包使用相對(duì)序列號(hào)來改善數(shù)據(jù)流。
下一個(gè)字段包含確認(rèn)號(hào)(ack 1485464298)或簡(jiǎn)單的確認(rèn)號(hào)。在發(fā)送方機(jī)器中捕獲的數(shù)據(jù)包有 1485464298 作為確認(rèn)號(hào)。在接收端,Ack 號(hào)是下一個(gè)數(shù)據(jù)包的值。
輸出中的第九個(gè)字段包含窗口大?。╳in 62780),即接收緩沖區(qū)中可用的字節(jié)數(shù)。窗口大小后面還有幾個(gè)其他字段,包括最大段大小 (MSS)。
最后一個(gè)字段(length 39)包含 tcpdump 捕獲的整個(gè)數(shù)據(jù)包的長(zhǎng)度。
3.限制抓包數(shù)
第一次運(yùn)行 tcpdump 命令時(shí),您可能會(huì)注意到系統(tǒng)會(huì)繼續(xù)捕獲網(wǎng)絡(luò)數(shù)據(jù)包,直到您傳遞中斷信號(hào)。您可以通過使用-c標(biāo)志預(yù)先指定要捕獲的數(shù)據(jù)包計(jì)數(shù)來覆蓋此默認(rèn)行為。
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump --interface any -c 3
上述命令將從任何活動(dòng)的網(wǎng)絡(luò)接口捕獲3個(gè)數(shù)據(jù)包。
4.根據(jù)字段過濾數(shù)據(jù)包
當(dāng)您對(duì)問題進(jìn)行故障排除時(shí),在終端上獲取大量文本輸出并不會(huì)使其變得更容易。這就是 tcpdump 中的過濾功能發(fā)揮作用的地方。您可以根據(jù)主機(jī)、協(xié)議、端口號(hào)等各種字段過濾數(shù)據(jù)包。
要僅捕獲 TCP 數(shù)據(jù)包,請(qǐng)鍵入:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump --interface any -c 5 tcp
同樣,如果要使用端口號(hào)過濾輸出:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump --interface any -c 5 port 50
上述命令只會(huì)檢索通過指定端口傳輸?shù)臄?shù)據(jù)包。
要獲取特定主機(jī)的數(shù)據(jù)包詳細(xì)信息:
tcpdump --interface any -c 5 host 112.123.13.145
如果要過濾特定主機(jī)發(fā)送或接收的數(shù)據(jù)包,請(qǐng)?jiān)诿钪惺褂胹rc或dst參數(shù)。
tcpdump --interface any -c 5 src 112.123.13.145
tcpdump --interface any -c 5 dst 112.123.13.145
您還可以使用邏輯運(yùn)算符and和or將兩個(gè)或多個(gè)表達(dá)式組合在一起。例如,要獲取屬于源 IP 112.123.13.145的數(shù)據(jù)包并使用端口80:
tcpdump --interface any -c 10 src 112.123.13.145 and port 80
可以使用括號(hào)將復(fù)雜表達(dá)式組合在一起,如下所示:
tcpdump --interface any -c 10 "(src 112.123.13.145 or src 234.231.23.234) and (port 45 or port 80)"
5. 查看包的內(nèi)容
您可以在 tcpdump 命令中使用-A和-x標(biāo)志來分析網(wǎng)絡(luò)數(shù)據(jù)包的內(nèi)容。-A 標(biāo)志代表ASCII格式,-x表示十六進(jìn)制格式。
查看系統(tǒng)捕獲的下一個(gè)網(wǎng)絡(luò)數(shù)據(jù)包的內(nèi)容:
tcpdump --interface any -c 1 -A
tcpdump --interface any -c 1 -x
6. 將捕獲數(shù)據(jù)保存到文件
如果您想保存捕獲數(shù)據(jù)以供參考,tcpdump 可以幫助您。只需使用默認(rèn)命令傳遞-w標(biāo)志即可將輸出寫入文件而不是在屏幕上顯示。
tcpdump --interface any -c 10 -w data.pcap
.pcap文件擴(kuò)展名代表數(shù)據(jù)包捕獲數(shù)據(jù)。您還可以使用-v標(biāo)志以詳細(xì)模式發(fā)出上述命令。
tcpdump --interface any -c 10 -w data.pcap -v
要使用 tcpdump 讀取.pcap文件,請(qǐng)使用-r標(biāo)志,后跟文件路徑。-r代表讀取。
tcpdump -r data.pcap
您還可以從文件中保存的數(shù)據(jù)包數(shù)據(jù)中過濾網(wǎng)絡(luò)數(shù)據(jù)包。
tcpdump -r data.pcap port 80
在 Linux 上監(jiān)控網(wǎng)絡(luò)流量
如果您被分配了管理 Linux 服務(wù)器的任務(wù),那么 tcpdump 命令是一個(gè)很好的工具,可以包含在您的武器庫中。您可以通過實(shí)時(shí)捕獲網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)包輕松解決與網(wǎng)絡(luò)相關(guān)的問題。
但在此之前,您的設(shè)備必須連接到互聯(lián)網(wǎng)。對(duì)于 Linux 初學(xué)者來說,即使通過命令行連接 Wi-Fi 也可能有點(diǎn)挑戰(zhàn)。但是,如果您使用正確的工具,那就輕而易舉了。