高級網工必備!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
- CentOS/Fedora:使用yum命令安裝。在終端中輸入以下命令并按回車鍵:
sudo yum update
sudo yum install tcpdump
- Arch Linux:使用pacman命令安裝。在終端中輸入以下命令并按回車鍵:
sudo pacman -Sy tcpdump
請注意,安裝過程中可能需要輸入管理員密碼進行確認。
- 等待安裝完成:安裝過程可能需要一些時間,系統會自動下載并安裝tcpdump及其依賴包。
- 驗證安裝:安裝完成后,你可以通過在終端中輸入以下命令來驗證安裝是否成功:
tcpdump --version
如果輸出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
(2) 抓取網卡eth0
抓取網卡eth0上所有報文
tcpdump -i eth0
(3) 抓取指定MAC
抓取ath10接口上包含MAC地址為11:22:33:44:55:66的數據包,并保存為ath10.pcap于當前路徑下:
tcpdump –i ath10 –w ath10.pcapetherhost 11:22:33:44:55:66
抓取ath10接口上源MAC地址為11:22:33:44:55:66的數據包,并保存為ath10.pcap于當前路徑下:
tcpdump –i ath10 –w ath10.pcapethersrc 11:22:33:44:55:66
抓取ath10接口上目的MAC地址為11:22:33:44:55:66的數據包,并保存為ath10.pcap于當前路徑下:
tcpdump –i ath10 –w ath10.pcapetherdst 11:22:33:44:55:66
(4) 抓取指定的主機
抓取eth0網卡上IP為192.168.168.2的所有報文:
tcpdump -i eth0 -nn 'host 192.168.1.2'
抓取eth0網卡上源IP為192.168.168.2的所有報文:
tcpdump -i eth0 -nn 'src host 192.168.1.2'
抓取eth0網卡上目的IP為192.168.168.2的所有報文:
tcpdump -i eth0 -nn 'dst host 192.168.1.2'
(5) 抓取指定端口
抓取eth0網卡上端口號為80的所有報文:
tcpdump -i eth0 -nnA 'port 80'
(6) 抓取指定主機和端口
抓取eth0網卡上IP為192.168.1.2且端口號為80的所有報文
tcpdump -i eth0 -nnA 'port 80 and src host 192.168.1.2'
(7) 抓取除某個端口外的其它端口
排除某個端口或者主機可以使用“!”符號,上例表示監聽非22端口的數據包。
tcpdump -i eth0 -nnA '!port 22'
(8) 協議過濾
可過濾ip6、arp、icmp、tcp、udp、igmp等協議:
tcpdump –i ath10 –w ath10.pcaptcpandetherhost 88:bf:e4:fc:26:19
該命令可以抓取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)’
該命令可以抓取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 個文件,自動按日期命名。
(11) 抓取指定長度數據包(節省空間)
tcpdump -i eth0 -s 200 # 只抓前200字節
(12) 結合正則表達式過濾
tcpdump -i eth0 -A 'tcp[20:2] > 1000' # 抓取TCP窗口大于1000的包
五、注意事項
1. 數據解碼優化
tcpdump直接輸出的數據包多為十六進制格式,不利于分析。最佳實踐: 抓包時用-w參數保存為pcap文件:
tcpdump -i eth0 -w traffic.pcap
- 用Wireshark等工具打開文件解碼分析,避免直接查看原始輸出。
2. 進程殘留處理
按Ctrl+C/Z結束抓包后,可能存在進程殘留導致內存占用異常。解決步驟:
- 檢查殘留進程:
ps | grep tcpdump
- 強制終止所有進程:
killall tcpdump
3. 文件管理策略
pcap文件長期留存會占用磁盤空間。清理方法:
- 查看文件列表及大小:
ls -la | grep pcap
- 刪除指定文件(替換xxx為文件名):
rm xxx.pcap