tcpdump
是一個最基本重要的網絡分析工具, 掌握好這個工具, 對於學習tcp/ip協議也是頗有幫助的. 理解了tcp/ip協議棧的知識, 分析調優網絡的能力纔會更高. 因此使用tcpdump
相比其它的工具, 更能幫咱們理解協議.html
用簡單的話來定義tcpdump
,就是:dump the traffic on a network
,根據使用者的定義對網絡上的數據包進行截獲的包分析工具。 tcpdump
能夠將網絡中傳送的數據包的「頭」徹底截獲 下來提供分析。它支持針對網絡層、協議、主機、網絡或端口的過濾,並提供and、or、not
等邏輯語句來幫助你去掉無用的信息。linux
瞭解如何使用Tcpdump來捕獲感興趣的數據包是一項必須掌控的基本功。web
可到「www.tcpdump.org」下載最新的Tcpdump源碼包。bash
注意⚠️:網絡
因tcpdump
的運行須要pcap
的支持,因此最好先行安裝pcap
軟件包,另外還要注意軟件的版本問題,建議按照網站上匹配的軟件包tcpdump
和pcap
一同下載。tcp
咱們以最新版本tcpdump-4.9.2,libpcap-1.9.0爲例:工具
在編譯Tcpdump
以前,應先肯定pcap
庫(libpcap
)已安裝完畢。這個庫是編譯Tcpdump
時所必需的。學習
安裝過程很是簡單:網站
tar -zxvf libpcap-1.9.0.tar.gz
cd libpcap-1.9.0
./configure
make
make install
複製代碼
該庫已安裝完畢,下面執行下面的命令來編譯並安裝Tcpdump:ui
tar -zxvf tcpdump-4.9.2.tar.gz
cd tcpdump-4.9.2
./configure
make
make install
複製代碼
Tcpdump
是個命令行方式的網絡嗅探器。他經過使用命令選項來過濾網卡截獲的數據包,假如不進行過濾,過多數量的包會使網絡管理員很難理清頭緒。Tcpdump
的命令格式以下:
tcpdump [ -adeflnNOpqRStuvxX ] [ -c 數量 ] [ -C 文檔尺寸 ] [ -F 文檔名 ] [ -i 網絡接口 ] [ -m 文檔名 ] [ -r 文檔名 ] [ -s 長度 ] [ -T 類型 ] [ -w 文檔名 ] [ -E algo:secret ] [ 表達式 ]
表1 Tcpdump經常使用命令行選項
命令行 | 描述 |
---|---|
-a | 將網絡地址和廣播地址轉變成容易識別的名字 |
-d | 將已截獲的數據包的代碼以人容易理解的格式輸出; |
-dd | 將已截獲的數據包的代碼以C程式的格式輸出; |
-ddd | 將已截獲的數據包的代碼以十進制格式輸出; |
-e | 輸出數據鏈路層的頭部信息; |
-f | 將internet地址以數字形式輸出; |
-l | 將標準輸出變爲行緩衝方式; |
-n | 不將網絡地址轉換成易識別的主機名,只以數字形式列出主機地址(如IP地址),這樣可以避免DNS查詢; |
-t | 不輸出時間戳; |
-v | 輸出較周詳的信息,例如IP包中的TTL和服務類型信息; |
-vv | 輸出詳盡的報文信息; |
-c | 在捕獲指定個數的數據包後退出; |
-F | 從指定的文檔中讀取過濾規則,忽略命令行中指定的其餘過濾規則; |
-i | 指定監聽的網絡接口; |
-r | 從指定的文檔中讀取數據包(該文檔通常經過-w選項產生); |
-w | 將截獲的數據包直接寫入指定的文檔中,不對其進行分析和輸出; |
-T | 將截獲的數據包直接解釋爲指定類型的報文,如今支持的類型有cnfp、rpc、rtp、snmp、vat和wb。 |
表1給出了一些經常使用的Tcpdump命令行選項,使用這些選項可以過濾出真正感興趣的數據包。
sudo tcpdump
複製代碼
普通狀況下,直接啓動 tcpdump
將監視第一個網絡接口上全部流過的數據包。
查看網卡名稱:
tcpdump -i lo0
複製代碼
例如截獲全部192.168.131.131
的主機收到的和發出的全部的數據包
tcpdump host 192.168.131.131 -i lo0 (必須加上網卡名稱)
複製代碼
tcpdump tcp -i lo0 -t -s 0 -c 100 -w /tmp/target.pcap
複製代碼
tcpdump -i eth0 -nn 'host 192.168.168.2'
複製代碼
這樣的話,192.168.168.2這臺主機接收到的包和發送的包都會被抓取.
tcpdump -i eth0 -nn 'src host 192.168.168.2'
複製代碼
這樣只有192.168.168.2這臺主機發送的包纔會被抓取。
tcpdump -i eth0 -nn 'dst host 192.168.168.2'
複製代碼
這樣只有192.168.168.2這臺主機接收到的包纔會被抓取。
tcpdump -i eth0 -nnA 'port 80'
複製代碼
上例是用來監聽主機的80端口收到和發送的全部數據包,結合-A參數,在web開發中,真是很是有用。
tcpdump -i eth0 -nnA 'port 80 and src host 192.168.168.2'
複製代碼
多個條件能夠用and,or
鏈接。上例表示監聽192.168.168.2
主機經過80
端口發送的數據包。
tcpdump host 192.168.168.2 and tcp port 8000
複製代碼
tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854
複製代碼
0x4745
爲"GET
"前兩個字母"GE
",0x4854
爲"HTTP
"前兩個字母"HT
"。
tcpdump
對截獲的數據並無進行完全解碼,數據包內的大部份內容是使用十六進制的形式直接打印輸出的。顯然這不利於分析網絡故障,一般的解決辦法是先使用帶-w
參數的tcpdump
截獲數據並保存到文件中,而後再使用其餘程序(如Wireshark
)進行解碼分析。固然也應該定義過濾規則,以免捕獲的數據包填滿整個硬盤。
下載地址:www.wireshark.org/download/
使用方法:jingyan.baidu.com/article/156…
打開咱們以前保存的文件。一些經常使用的使用方法:經常使用語法規則
參考: 各類工具使用手冊
而後咱們就能夠愉快的抓包了。