雖然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'