Linux使用tcpdump捕獲網(wǎng)絡(luò)數(shù)據(jù)包的詳細(xì)步驟
引言
在網(wǎng)絡(luò)故障排查、協(xié)議分析或網(wǎng)絡(luò)安全檢測中,抓包工具是不可或缺的"利器"。而tcpdump作為Linux系統(tǒng)中歷史最悠久、功能最強(qiáng)大的命令行抓包工具,至今仍是工程師的首選。本文將從基礎(chǔ)操作到實戰(zhàn)技巧,帶你掌握用tcpdump捕獲網(wǎng)絡(luò)數(shù)據(jù)包的完整流程,尤其適合需要對接口板、設(shè)備通信進(jìn)行分析的場景,同時將重點介紹如何通過后臺命令避免遠(yuǎn)程終端關(guān)閉導(dǎo)致的抓包中斷。
一、什么是tcpdump?為什么選擇它?
tcpdump是一款運(yùn)行在Linux/Unix系統(tǒng)上的命令行網(wǎng)絡(luò)抓包工具,它能實時捕獲網(wǎng)絡(luò)接口上傳輸?shù)臄?shù)據(jù)包,并按需求保存或解析。相比圖形化工具(如Wireshark),它的優(yōu)勢在于:
- 輕量高效:無需圖形界面,可直接在遠(yuǎn)程服務(wù)器或嵌入式設(shè)備上運(yùn)行;
- 靈活可控:通過命令參數(shù)精確過濾數(shù)據(jù)包,避免無關(guān)數(shù)據(jù)干擾;
- 適合長期監(jiān)控:支持后臺運(yùn)行和循環(huán)抓包,適合長時間記錄網(wǎng)絡(luò)行為。
對于需要分析接口板、設(shè)備間通信的場景(如工業(yè)控制、物聯(lián)網(wǎng)設(shè)備),tcpdump的輕量化特性使其成為最佳選擇。
二、準(zhǔn)備工作:環(huán)境與工具
在開始抓包前,需準(zhǔn)備以下環(huán)境和工具:
- 操作終端:
- 遠(yuǎn)程登錄工具(如MobaXterm):用于連接目標(biāo)設(shè)備(如樣機(jī)后端);
- 目標(biāo)設(shè)備:運(yùn)行Linux系統(tǒng),已安裝tcpdump(默認(rèn)多數(shù)Linux發(fā)行版自帶,若未安裝可通過
apt install tcpdump或yum install tcpdump安裝)。
- 目標(biāo)對象:
- 需監(jiān)控的網(wǎng)絡(luò)接口(如接口板網(wǎng)卡);
- 待復(fù)現(xiàn)的網(wǎng)絡(luò)問題(如通信超時、數(shù)據(jù)異常等)。
三、實戰(zhàn)步驟:用tcpdump捕獲接口板網(wǎng)卡數(shù)據(jù)
以"捕獲接口板網(wǎng)卡數(shù)據(jù)包并分析問題"為例,完整流程如下:
步驟1:識別目標(biāo)網(wǎng)卡名稱
在抓包前,必須明確需要監(jiān)控的網(wǎng)卡(如接口板連接的網(wǎng)卡)。通過以下命令查看所有網(wǎng)卡信息:
ifconfig # 或 ip addr(推薦,更全面)
執(zhí)行后會顯示類似以下的輸出:
enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
...
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.5 netmask 255.255.255.0 broadcast 10.0.0.255
...
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
...
根據(jù)描述區(qū)分網(wǎng)卡類型:
- 接口板網(wǎng)卡:通常是直接連接外部設(shè)備的物理網(wǎng)卡(如示例中的
enp2s0); - 其他網(wǎng)卡:如用戶網(wǎng)卡(
eth0)、虛擬網(wǎng)卡(docker0)等,需排除。
步驟2:執(zhí)行抓包命令(含后臺運(yùn)行方案)
根據(jù)場景需求選擇以下抓包方式(在目標(biāo)設(shè)備的終端中執(zhí)行,如示教器終端),重點推薦遠(yuǎn)程操作時使用后臺命令,避免終端關(guān)閉導(dǎo)致抓包中斷:
方式1:基礎(chǔ)抓包(單次捕獲,適合短時操作)
適合短時間內(nèi)復(fù)現(xiàn)問題的場景,命令格式:
tcpdump -i 網(wǎng)卡名稱 -w 保存路徑/文件名.cap
示例:捕獲接口板網(wǎng)卡enp2s0的數(shù)據(jù)包,保存到桌面的test.cap:
tcpdump -i enp2s0 -w /root/Desktop/test.cap
- 參數(shù)說明:
-i enp2s0:指定監(jiān)控enp2s0網(wǎng)卡;-w /root/Desktop/test.cap:將數(shù)據(jù)包保存為.cap文件(不顯示實時內(nèi)容,避免占用資源)。
方式2:循環(huán)抓包(長期監(jiān)控,自動分割文件)
若問題復(fù)現(xiàn)時間較長,需避免單個文件過大,可使用循環(huán)抓包(自動分割文件并限制數(shù)量):
nice -n -10 tcpdump -i 網(wǎng)卡名稱 -C 單個文件大小(M) -W 最大文件數(shù) -w 保存路徑/前綴名.cap
示例:監(jiān)控enp2s0,單個文件最大30MB,最多保存20個文件(總?cè)萘考s600MB):
nice -n -10 tcpdump -i enp2s0 -C 30 -W 20 -w /root/Desktop/name.cap
- 參數(shù)說明:
nice -n -10:提高進(jìn)程優(yōu)先級,避免抓包被系統(tǒng)低優(yōu)先級調(diào)度;-C 30:單個文件達(dá)到30MB時自動創(chuàng)建新文件;-W 20:最多生成20個文件(超出后覆蓋最早的文件);- 保存的文件名將按
name_00.cap、name_01.cap…遞增。
方式3:后臺抓包(推薦遠(yuǎn)程操作,防止終端關(guān)閉中斷)
遠(yuǎn)程操控時,若不小心關(guān)閉終端,普通抓包進(jìn)程會被終止。使用nohup命令可讓抓包脫離終端獨立運(yùn)行,即使關(guān)閉終端也能繼續(xù):
# 基礎(chǔ)格式:nohup [抓包命令] > 日志路徑 2>&1 & nohup tcpdump -i 網(wǎng)卡名稱 -w 保存路徑/文件名.cap > /var/log/tcpdump.log 2>&1 &
示例:后臺捕獲enp2s0的數(shù)據(jù)包,日志輸出到/var/log/tcpdump.log:
nohup tcpdump -i enp2s0 -w /root/Desktop/background_cap.cap > /var/log/tcpdump.log 2>&1 &
- 參數(shù)說明:
nohup:忽略終端關(guān)閉信號(SIGHUP),保證進(jìn)程持續(xù)運(yùn)行;> /var/log/tcpdump.log 2>&1:將抓包過程中的日志(如錯誤信息)輸出到指定文件,避免默認(rèn)寫入nohup.out;- 末尾
&:將進(jìn)程放入后臺運(yùn)行,終端可繼續(xù)執(zhí)行其他命令。
步驟3:管理后臺抓包進(jìn)程(關(guān)鍵操作)
使用nohup后臺抓包后,需通過以下命令管理進(jìn)程:
查看后臺抓包進(jìn)程:
ps -ef | grep tcpdump
輸出類似:
root 12345 67890 0 16:00 ? 00:00:01 tcpdump -i enp2s0 -w /root/Desktop/background_cap.cap
其中12345為進(jìn)程ID(PID)。
停止后臺抓包:
問題復(fù)現(xiàn)完成后,通過PID終止進(jìn)程(必須正常停止,避免文件截斷):
kill -9 12345 # 替換為實際PID
步驟4:復(fù)現(xiàn)問題并確認(rèn)抓包狀態(tài)
- 復(fù)現(xiàn)問題:執(zhí)行抓包命令后(無論前臺還是后臺),在設(shè)備上操作以復(fù)現(xiàn)需要分析的問題(如接口板通信異常)。
- 確認(rèn)抓包狀態(tài):
- 前臺抓包:終端阻塞狀態(tài)表示正常運(yùn)行;
- 后臺抓包:通過
ps -ef | grep tcpdump查看進(jìn)程是否存在,或檢查.cap文件大小是否隨時間增長(ls -lh /root/Desktop/*.cap)。
步驟5:導(dǎo)出與分析抓包文件
- 確認(rèn)文件:執(zhí)行以下命令,檢查.cap文件是否正常保存:
ls -lh /root/Desktop/*.cap
若顯示類似以下內(nèi)容,說明保存成功:
-rw-r--r-- 1 root root 25M Aug 10 15:30 /root/Desktop/test.cap -rw-r--r-- 1 root root 40M Aug 10 16:10 /root/Desktop/background_cap.cap
導(dǎo)出文件:
- 通過遠(yuǎn)程工具(如MobaXterm)的文件瀏覽器導(dǎo)航到
/root/Desktop/; - 右鍵點擊目標(biāo).cap文件,選擇"Download"導(dǎo)出到本地電腦。
用Wireshark分析:
將導(dǎo)出的.cap文件用Wireshark打開(雙擊文件或在Wireshark中選擇"文件→打開"),即可分析數(shù)據(jù)包細(xì)節(jié):
- 查看通信雙方的IP、端口;
- 過濾特定協(xié)議(如TCP、UDP)或關(guān)鍵詞(如
ip.addr == 192.168.1.100); - 定位異常數(shù)據(jù)包(如重傳、超時、錯誤校驗等)。
四、常見問題與解決方案
抓包文件被截斷(Wireshark提示錯誤)
- 原因:未正常停止tcpdump(如強(qiáng)制關(guān)閉終端、用
kill -9終止進(jìn)程但文件未寫完)。 - 解決:必須通過
Ctrl + C(前臺)或kill PID(后臺)正常停止;若文件已損壞,可用editcap修復(fù):
editcap -F pcap 損壞的文件.cap 修復(fù)后的文件.cap
后臺抓包進(jìn)程意外終止
- 原因:目標(biāo)目錄磁盤空間不足,或權(quán)限不足導(dǎo)致無法寫入文件。
- 解決:抓包前用
df -h檢查磁盤空間,確保/root/Desktop/有寫入權(quán)限(chmod 777 /root/Desktop臨時開放權(quán)限)。
遠(yuǎn)程終端關(guān)閉后抓包停止
- 原因:未使用
nohup或&,進(jìn)程依賴終端會話。 - 解決:遠(yuǎn)程操作時務(wù)必用
nohup [命令] &啟動抓包,脫離終端依賴。
五、擴(kuò)展工具推薦
- Wireshark:圖形化分析工具,支持過濾、統(tǒng)計、協(xié)議解析,適合分析.cap文件;
- editcap:Wireshark附帶的命令行工具,用于修復(fù)被截斷的.cap文件;
- tshark:tcpdump的圖形化替代工具,支持更豐富的過濾語法(
tshark -i enp2s0 -w 文件名.cap)。
以上就是Linux使用tcpdump捕獲網(wǎng)絡(luò)數(shù)據(jù)包的詳細(xì)步驟的詳細(xì)內(nèi)容,更多關(guān)于Linux tcpdump捕獲網(wǎng)絡(luò)數(shù)據(jù)包的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
如何搭建并配置HTTPD文件服務(wù)及訪問權(quán)限控制
這篇文章主要介紹了如何搭建并配置HTTPD文件服務(wù)及訪問權(quán)限控制的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-06-06
使用 Linux seq 命令生成數(shù)字序列(推薦)
seq命令用于以指定增量從首數(shù)開始打印數(shù)字到尾數(shù),即產(chǎn)生從某個數(shù)到另外一個數(shù)之間的所有整數(shù),并且可以對整數(shù)的格式、寬度、分割符號進(jìn)行控制。這篇文章主要介紹了使用 Linux seq 命令生成數(shù)字序列,需要的朋友可以參考下2020-01-01
在 Linux 中不使用 CD 命令進(jìn)入目錄/文件夾的方法
眾所周知,如果沒有 cd 命令,我們無法 Linux 中切換目錄。接下來通過本文給大家介紹了在 Linux 中不使用 CD 命令進(jìn)入目錄/文件夾的方法,需要的朋友可以參考下2019-04-04
CentOS 6.3 安裝配置Apache2.2.6的方法(源碼編譯安裝)
這篇文章主要介紹了CentOS 6.3 安裝配置Apache2.2.6的方法,需要的朋友可以參考下2014-11-11
詳解Linux 虛擬機(jī)根分區(qū)磁盤擴(kuò)充空間記錄
這篇文章主要介紹了詳解Linux 虛擬機(jī)根分區(qū)磁盤擴(kuò)充空間記錄,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
linux驅(qū)動開發(fā)中常用函數(shù)copy_from_user open read write詳解
本文解說了inux驅(qū)動開發(fā)函數(shù)copy_from_user ,open ,read write幾個常用函數(shù),現(xiàn)在一起來學(xué)習(xí)他們的使用過程吧2021-08-08

