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