高級網工必備! Tcpdump 抓包神器從入門到實戰全攻略

為了更好的分析網絡,常見客戶機的Windows作業系統可以安裝Wireshark等抓包軟體抓取資料流進行分析。那麼伺服器常用的Linux等系統如何抓取介面封包分析網路呢?

本期將介紹高級網工必備工具—Tcpdump!

一、Tcpdump簡介 

在網路維運中,Windows 用戶常用Wireshark 抓包,那Linux 伺服器該如何分析網路流量?今天揭秘高級網工的「瑞士軍刀」-Tcpdump,從安裝到實戰全流程拆解,文末附避坑指南!

工具定位:為什麼網工必須掌握Tcpdump?

Tcpdump是類Unix 系統的王牌抓包工具,名字由「TCP 協定」和「資料匯出」組合而來。它基於libpcap 庫實時捕獲網路數據包,支援:

  •  嗅探並保存流量數據
  • 按協定/ 連接埠/ IP 精準過濾
  • 產生pcap 文件供後續分析

適用場景:Linux、Solaris、BSD 等系統,Windows 版本為WinDump(需WinPcap 驅動)。

二、Tcpdump安裝介紹  

在Linux作業系統中安裝tcpdump,你可以透過以下步驟進行:

  • 開啟終端機:在Linux系統中,你可以透過點擊終端圖示或使用快速鍵(通常是Ctrl+Alt+T)來開啟終端機。
  • 使用套件管理器安裝tcpdump:根據你的Linux發行版,選擇對應的套件管理器來安裝tcpdump。

以下是一些常見的發行版和對應的套件管理器:

  • Ubuntu/Debian:使用apt-get指令安裝。在終端機中輸入以下命令並按下回車鍵:
sudo apt-get update
sudo apt-getinstall tcpdump
  • 1.
  • 2.
  • CentOS/Fedora:使用yum指令安裝。在終端機中輸入以下命令並按下回車鍵:
sudo yum update
sudo yum install tcpdump
  • 1.
  • 2.
  • Arch Linux:使用pacman指令安裝。在終端機中輸入以下命令並按下回車鍵:
sudo pacman -Sy tcpdump
  • 1.

請注意,安裝過程中可能需要輸入管理員密碼進行確認。

  • 等待安裝完成:安裝過程可能需要一些時間,系統會自動下載並安裝tcpdump及其依賴套件。
  • 驗證安裝:安裝完成後,你可以透過在終端機中輸入以下命令來驗證安裝是否成功:
tcpdump --version
  • 1.

如果輸出tcpdump的版本訊息,則表示安裝成功。

這樣,你就成功在Linux作業系統中安裝了tcpdump。接下來,你可以使用tcpdump指令來擷取和分析網路封包了。記得在使用tcpdump時,可能需要使用sudo或以root使用者身分執行以便取得足夠的權限來擷取封包。

三、Tcpdump基本用法  

透過指令:tcpdump -help,可查看tcpdump工具指令選項:

Tcpdump的基本指令格式是: tcpdump [選項] [表達式] 

  • -a:將網路位址和廣播位址轉變成名字
  • -A:以ASCII碼格式列印所有資料包,並將連結層的頭部最小化
  • -B:用於設定作業系統捕捉緩衝大小
  • -c:指定抓取封包的數量
  • -C:此選項用於配合-w選項使用,如果保存文件大小超過閾值則關閉當前文件,並啟用新文件繼續保存數據(分多個固定大小的文件保存抓包數據,利於長期抓包的場景)
  • -d 將匹配到的資料包以人們能夠理解的彙編格式輸出
  • -dd:以C語言的形式列印出包匹配碼.
  • -ddd:以十進制數的形式列印出包匹配碼
  • -D:列印系統中所有支援抓包的網路接口
  • -e:在輸出行列印出資料鏈結層的頭部訊息
  • -E:解密IPsec ESP分組。具體來說,它使用spi@ipaddr algo:secret的格式來解密那些以addr作為位址,並且包含了安全參數索引值spi的IPsec ESP分組。這樣,tcpdump可以捕獲並顯示經過IPsec加密的資料包內容,幫助使用者更好地分析和理解網路流量
  • -f :將外部的網際網路位址以數字的形式列印出來
  • -F:使用file檔案作為過濾條件表達式的輸入
  • -i:指定監聽網路介面
  • -l:對標準輸出進行行緩衝
  • -L:列出指定網路介面所支援的資料鏈結層的類型後退出
  • -m:透過module 指定的file 裝載SMI MIB 模組
  • -n:不把網路位址轉換成名稱,也就是直接顯示IP位址而不是主機名
  • -N:不列印出host 的網域部分
  • -nn:不進行連接埠名稱的轉換
  • -O:不啟用進行套件匹配時所使用的最佳化程式碼
  • -p:不讓網路介面進入混雜模式
  • -q:快速簡短列印輸出
  • -R:設定tcpdump 對ESP/AH 封包的解析依照RFC1825而非RFC1829
  • -r:從檔案file 讀取包數據
  • -s:封包抓取長度,如果不設定預設將會是68位元組
  • -S:列印TCP 封包的順序號時, 使用絕對的順序號, 而不是相對的順序號
  • -t:在每行輸出中不列印時間戳
  • -tt:不對每行輸出的時間進行格式處理
  • -ttt:tcpdump 輸出時, 每兩行列印之間會延遲一個一段時間(以毫秒為單位)
  • -tttt:在每行列印的時間戳記之前新增日期的列印
  • -u:列印出未加密的NFS句柄
  • -U:使得當tcpdump在使用-w 選項時, 其文件寫入與包的保存同步
  • -v:分析和列印產生詳細的輸出
  • -vv:產生比-v更詳細的輸出
  • -vvv:產生比-vv更詳細的輸出
  • -w:把套件資料直接寫入檔案而不進行分析列印輸出
  • -W:設定輸出檔的最大數目
  • -x:以十六進位的形式列印每個資料包的頭部數據,但不包括資料鏈結層的頭部
  • -xx:以十六進位的形式列印每個資料包的頭部數據,並且包括資料鏈結層的頭部
  • -X:以ASCII碼格式顯示輸出,但不包含資料鏈結層的頭部
  • -XX:以ASCII碼格式顯示輸出,並且包含資料鏈結層的頭部
  • -y:只捕獲資料鏈路層協定類型是datalinktype的資料包

四、Tcpdump常見捕獲方式  

(1) 預設啟動

tcpdump監視系統第一個網路介面上所有流過的資料包。

tcpdump
  • 1.

(2) 抓取網路卡eth0

抓取網卡eth0上所有報文

tcpdump -i eth0
  • 1.

(3) 抓取指定MAC

抓取ath10介面上包含MAC位址為11:22:33:44:55:66的封包,並儲存為ath10.pcap於目前路徑下:

tcpdump –i ath10 –w ath10.pcapetherhost 11:22:33:44:55:66
  • 1.

抓取ath10介面上來源MAC位址為11:22:33:44:55:66的封包,並儲存為ath10.pcap於目前路徑下:

tcpdump –i ath10 –w ath10.pcapethersrc 11:22:33:44:55:66
  • 1.

抓取ath10介面上目的MAC位址為11:22:33:44:55:66的封包,並儲存為ath10.pcap於目前路徑下:

tcpdump –i ath10 –w ath10.pcapetherdst 11:22:33:44:55:66
  • 1.

(4) 抓取指定的主機

抓取eth0網路卡上IP為192.168.168.2的所有封包:

tcpdump -i eth0 -nn 'host 192.168.1.2'
  • 1.

抓取eth0網卡上來源IP為192.168.168.2的所有封包:

tcpdump -i eth0 -nn 'src host 192.168.1.2'
  • 1.

抓取eth0網卡上目的IP為192.168.168.2的所有封包:

tcpdump -i eth0 -nn 'dst host 192.168.1.2'
  • 1.

(5) 抓取指定端口

抓取eth0網卡上連接埠號碼為80的所有封包:

tcpdump -i eth0 -nnA 'port 80'
  • 1.

(6) 抓取指定主機和連接埠

抓取eth0網路卡上IP為192.168.1.2且連接埠號碼為80的所有封包

tcpdump -i eth0 -nnA 'port 80 and src host 192.168.1.2'
  • 1.

(7) 抓取除某個連接埠外的其它端口

排除某個連接埠或主機可以使用“!”符號,上例表示監聽非22埠的封包。

tcpdump -i eth0 -nnA '!port 22'
  • 1.

(8) 協議過濾

可過濾ip6、arp、icmp、tcp、udp、igmp等協定:

tcpdump –i ath10 –w ath10.pcaptcpandetherhost 88:bf:e4:fc:26:19
  • 1.

此指令可以抓取ath10介面上包含MAC位址為88:bf:e4:fc:26:19的tcp封包,保存於ath10.pcap檔中。

(9) 組合過濾

過濾規則可以透過邏輯運算子組合使用,注意協議的預過濾規則要放在第一位。

tcpdump –i eth0 –w eth0.pcaptcpandsrc ‘(192.168.96.54or 192.168.96.7)’
  • 1.

此指令可抓取eth0介面上來源位址為192.168.96.54及192.168.96.7的tcp資料包,保存於eth0.pcap檔。註:小括號() 需與轉義符' 搭配使用。

(10) 分文件滾動保存(適合長期監控)

tcpdump -i eth0 -C 100 -W 10 -w daily_%Y%m%d.pcap
注释:每个文件 100MB,最多保留 10 个文件,自动按日期命名。
  • 1.
  • 2.

(11) 抓取指定長度資料包(節省空間)

tcpdump -i eth0 -s 200  # 只抓前200字节
  • 1.

(12) 結合正規表示式過濾

tcpdump -i eth0 -A 'tcp[20:2] > 1000'  # 抓取TCP窗口大于1000的包
  • 1.

五、注意事項

1. 數據解碼優化  

tcpdump直接輸出的封包多為十六進位格式,不利於分析。最佳實務: 抓包時用-w參數儲存為pcap檔:  

tcpdump -i eth0 -w traffic.pcap
  • 1.

- 用Wireshark等工具開啟檔案解碼分析,避免直接查看原始輸出。  

2. 進程殘留處理  

按Ctrl+C/Z結束抓包後,可能有進程殘留導致記憶體佔用異常。解決步驟:  

- 檢查殘留進程:  

ps | grep tcpdump
  • 1.

- 強制終止所有進程:  

killall tcpdump
  • 1.

3. 文件管理策略  

pcap檔案長期留存會佔用磁碟空間。清理方法:  

- 查看檔案清單及大小:  

ls -la | grep pcap
  • 1.

- 刪除指定檔案(替換xxx為檔案名稱):  

rm xxx.pcap