Linux使用tcpdump捕獲網(wǎng)絡(luò)數(shù)據(jù)包的詳細(xì)步驟
引言
在網(wǎng)絡(luò)故障排查、協(xié)議分析或網(wǎng)絡(luò)安全檢測中,抓包工具是不可或缺的"利器"。而tcpdump作為Linux系統(tǒng)中歷史最悠久、功能最強(qiáng)大的命令行抓包工具,至今仍是工程師的首選。本文將從基礎(chǔ)操作到實(shí)戰(zhàn)技巧,帶你掌握用tcpdump捕獲網(wǎng)絡(luò)數(shù)據(jù)包的完整流程,尤其適合需要對接口板、設(shè)備通信進(jìn)行分析的場景,同時(shí)將重點(diǎn)介紹如何通過后臺(tái)命令避免遠(yuǎn)程終端關(guān)閉導(dǎo)致的抓包中斷。
一、什么是tcpdump?為什么選擇它?
tcpdump是一款運(yùn)行在Linux/Unix系統(tǒng)上的命令行網(wǎng)絡(luò)抓包工具,它能實(shí)時(shí)捕獲網(wǎng)絡(luò)接口上傳輸?shù)臄?shù)據(jù)包,并按需求保存或解析。相比圖形化工具(如Wireshark),它的優(yōu)勢在于:
- 輕量高效:無需圖形界面,可直接在遠(yuǎn)程服務(wù)器或嵌入式設(shè)備上運(yùn)行;
- 靈活可控:通過命令參數(shù)精確過濾數(shù)據(jù)包,避免無關(guān)數(shù)據(jù)干擾;
- 適合長期監(jiān)控:支持后臺(tái)運(yùn)行和循環(huán)抓包,適合長時(shí)間記錄網(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í)、數(shù)據(jù)異常等)。
三、實(shí)戰(zhàn)步驟:用tcpdump捕獲接口板網(wǎng)卡數(shù)據(jù)
以"捕獲接口板網(wǎng)卡數(shù)據(jù)包并分析問題"為例,完整流程如下:
步驟1:識(shí)別目標(biāo)網(wǎng)卡名稱
在抓包前,必須明確需要監(jiān)控的網(wǎng)卡(如接口板連接的網(wǎng)卡)。通過以下命令查看所有網(wǎng)卡信息:
ifconfig # 或 ip addr(推薦,更全面)
執(zhí)行后會(huì)顯示類似以下的輸出:
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í)行抓包命令(含后臺(tái)運(yùn)行方案)
根據(jù)場景需求選擇以下抓包方式(在目標(biāo)設(shè)備的終端中執(zhí)行,如示教器終端),重點(diǎn)推薦遠(yuǎn)程操作時(shí)使用后臺(tái)命令,避免終端關(guān)閉導(dǎo)致抓包中斷:
方式1:基礎(chǔ)抓包(單次捕獲,適合短時(shí)操作)
適合短時(shí)間內(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文件(不顯示實(shí)時(shí)內(nèi)容,避免占用資源)。
方式2:循環(huán)抓包(長期監(jiān)控,自動(dòng)分割文件)
若問題復(fù)現(xiàn)時(shí)間較長,需避免單個(gè)文件過大,可使用循環(huán)抓包(自動(dòng)分割文件并限制數(shù)量):
nice -n -10 tcpdump -i 網(wǎng)卡名稱 -C 單個(gè)文件大小(M) -W 最大文件數(shù) -w 保存路徑/前綴名.cap
示例:監(jiān)控enp2s0,單個(gè)文件最大30MB,最多保存20個(gè)文件(總?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:單個(gè)文件達(dá)到30MB時(shí)自動(dòng)創(chuàng)建新文件;-W 20:最多生成20個(gè)文件(超出后覆蓋最早的文件);- 保存的文件名將按
name_00.cap、name_01.cap…遞增。
方式3:后臺(tái)抓包(推薦遠(yuǎn)程操作,防止終端關(guān)閉中斷)
遠(yuǎn)程操控時(shí),若不小心關(guān)閉終端,普通抓包進(jìn)程會(huì)被終止。使用nohup命令可讓抓包脫離終端獨(dú)立運(yùn)行,即使關(guān)閉終端也能繼續(xù):
# 基礎(chǔ)格式:nohup [抓包命令] > 日志路徑 2>&1 & nohup tcpdump -i 網(wǎng)卡名稱 -w 保存路徑/文件名.cap > /var/log/tcpdump.log 2>&1 &
示例:后臺(tái)捕獲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:將抓包過程中的日志(如錯(cuò)誤信息)輸出到指定文件,避免默認(rèn)寫入nohup.out;- 末尾
&:將進(jìn)程放入后臺(tái)運(yùn)行,終端可繼續(xù)執(zhí)行其他命令。
步驟3:管理后臺(tái)抓包進(jìn)程(關(guān)鍵操作)
使用nohup后臺(tái)抓包后,需通過以下命令管理進(jìn)程:
查看后臺(tái)抓包進(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)。
停止后臺(tái)抓包:
問題復(fù)現(xiàn)完成后,通過PID終止進(jìn)程(必須正常停止,避免文件截?cái)?/strong>):
kill -9 12345 # 替換為實(shí)際PID
步驟4:復(fù)現(xiàn)問題并確認(rèn)抓包狀態(tài)
- 復(fù)現(xiàn)問題:執(zhí)行抓包命令后(無論前臺(tái)還是后臺(tái)),在設(shè)備上操作以復(fù)現(xiàn)需要分析的問題(如接口板通信異常)。
- 確認(rèn)抓包狀態(tài):
- 前臺(tái)抓包:終端阻塞狀態(tài)表示正常運(yùn)行;
- 后臺(tái)抓包:通過
ps -ef | grep tcpdump查看進(jìn)程是否存在,或檢查.cap文件大小是否隨時(shí)間增長(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/; - 右鍵點(diǎn)擊目標(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ù)包(如重傳、超時(shí)、錯(cuò)誤校驗(yàn)等)。
四、常見問題與解決方案
抓包文件被截?cái)啵╓ireshark提示錯(cuò)誤)
- 原因:未正常停止tcpdump(如強(qiáng)制關(guān)閉終端、用
kill -9終止進(jìn)程但文件未寫完)。 - 解決:必須通過
Ctrl + C(前臺(tái))或kill PID(后臺(tái))正常停止;若文件已損壞,可用editcap修復(fù):
editcap -F pcap 損壞的文件.cap 修復(fù)后的文件.cap
后臺(tái)抓包進(jìn)程意外終止
- 原因:目標(biāo)目錄磁盤空間不足,或權(quán)限不足導(dǎo)致無法寫入文件。
- 解決:抓包前用
df -h檢查磁盤空間,確保/root/Desktop/有寫入權(quán)限(chmod 777 /root/Desktop臨時(shí)開放權(quán)限)。
遠(yuǎn)程終端關(guān)閉后抓包停止
- 原因:未使用
nohup或&,進(jìn)程依賴終端會(huì)話。 - 解決:遠(yuǎn)程操作時(shí)務(wù)必用
nohup [命令] &啟動(dòng)抓包,脫離終端依賴。
五、擴(kuò)展工具推薦
- Wireshark:圖形化分析工具,支持過濾、統(tǒng)計(jì)、協(xié)議解析,適合分析.cap文件;
- editcap:Wireshark附帶的命令行工具,用于修復(fù)被截?cái)嗟?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)文章
Linux使用mmap調(diào)用創(chuàng)建、讀寫和釋放共享內(nèi)存區(qū)域
共享內(nèi)存是Linux系統(tǒng)中一種高效的進(jìn)程間通信(IPC)機(jī)制,允許多個(gè)進(jìn)程訪問同一塊物理內(nèi)存區(qū)域,在所有IPC機(jī)制中,共享內(nèi)存是最快的一種,因?yàn)樗苊饬藬?shù)據(jù)在內(nèi)核空間和用戶空間之間的復(fù)制,本文將詳細(xì)介紹如何使用mmap系統(tǒng)調(diào)用創(chuàng)建、讀寫和釋放共享內(nèi)存區(qū)域2025-11-11
centOS7下mysql插入中文字符報(bào)錯(cuò)問題解決方法
本篇文章主要介紹了centOS7下mysql插入中文字符報(bào)錯(cuò)問題解決,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02
centos 6.5 oracle開機(jī)自啟動(dòng)的環(huán)境配置詳解
這篇文章主要介紹了centos 6.5 oracle開機(jī)自啟動(dòng)的環(huán)境配置詳解的相關(guān)資料,需要的朋友可以參考下2017-01-01
Linux IO多路復(fù)用之epoll網(wǎng)絡(luò)編程
今天小編就為大家分享一篇關(guān)于Linux IO多路復(fù)用之epoll網(wǎng)絡(luò)編程,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12

