雖然man上寫的很詳細,但有時用的時候可能並不想去man,還是寫些筆記,方便以後使用。
基本命令格式如下tcpdump [- 包顯示格式參數] [- 捕獲控制參數] '過濾匹配條件'
tcpdump可以以一定的顯示格式來列印滿足過濾條件的包資訊,包的來源可以是網路介面,也可以是檔案。
通常僅僅鍵入tcpdump就可以開始包的捕獲,但這時由於缺少捕獲條件,你想要的包會淹沒在一大批無用的資料中,而且缺少顯示格式參數的控制,tcpdump只會列印IP包頭資訊,有時你需要更精確的捕獲控制和更詳細的包資訊,那麼就需要更多的參數。
1 捕獲控制參數
-s pkt-size 每個包的最小緩衝區,預設為98,超過的包內容會被截斷
-c count 當捕獲到count個包後,停止捕獲,否則進行連繼捕獲,當然你可以通過SIGINT或SIGTERM資訊來終止捕獲
-w file-name 將捕獲的包寫入的檔案而非標準輸出,供以後分析
-r file-name 從檔案中讀取包的內容,並根據過濾條件顯示到標準輸出上
-C p-f-size 當使用-w參數時,當把包寫入檔案時,如果檔案大於size MB,則關閉當前檔案,開啟新的檔案進行儲存
-F file-match 使用檔案中的過濾運算式
-i interface 捕獲特定的介面
-T type 將捕獲的包解釋為type,支援的type列表為aodv,rtp,rtcp,rpc,snmp,tftp...
-W file-count 儲存捕獲包的檔案個數
-y dl-type 設定鏈路層類型
-Z user
-l 使得tcpdump的輸出為行緩衝的,以便為其他管道處理
-E spi@ipaddr algo:secret 使用指定資訊解密IPSEC資料,演算法可以是des-cbc等,secret為ASCII的密鑰
-D 顯示系統當前可用介面1
-L 顯示當前系統的鏈路層資訊並退出
2 包顯示參數
-x 以十六進位格式列印包的內容,IP頭開始
-xx 包括鏈路層頭資訊
-X 同時以十
-A 以ASCII文本方式顯示包內容,html等比較方便
-e 打包頭的印鏈路層資訊
-C
-n 不將ip址轉換為網域名稱
-nn 同時不把連接埠轉換為服務
-S 顯示TCP絕對序號,而非相對序號
-t 不列印時間
-tt 列印未格式化的時間
-v 顯示IP頭的詳細資料如TTL,ID,Length
3 過濾運算式
[協議] [方向] [目標]
關鍵字
目標指定:host , net, port,portrange
net 192.168.1.1/24
portrange 1-1024
方向指定:src,dst 可以用 or and串連
協議指定:ether,wlan,ip,ip6,arp,tcp,udp
ip proto tcp
ip6 proto udp
ip6 protochain type 頭中包含類型type的頭
其他: gateway,broadcast,less,greater或演算法運算式
less length
這些關鍵詞可能通過not !,and &&及 or ||來進行邏輯疊加
4 DPI
可以訪問資料包的任意位置的數值並進行過濾
一般格式為:proto[算術運算式:size] [運算子] [值]
算術運算式中可以使用+ - * / & | << >>,,如udp[4:2]&0xffff>256
運行符可以是> < >= <= != =
一個樣本:tcpdump -x -c 10 -s 300 'dst port 8080 and udp[4:2]&0xffff>200'