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