tshark是wireshark
網(wǎng)絡(luò)分析工具下的一個(gè)分支,主要用于命令行環(huán)境進(jìn)行抓包、分析记焊,尤其對協(xié)議深層解析時(shí),tcpdump
難以勝任的場景中栓撞。
主要參數(shù)
抓包接口類
-i 設(shè)置抓包的網(wǎng)絡(luò)接口遍膜,不設(shè)置則默認(rèn)為第一個(gè)非自環(huán)接口
-D 列出當(dāng)前存在的網(wǎng)絡(luò)接口
-f 設(shè)定抓包過濾表達(dá)式
-s 設(shè)置每個(gè)抓包的大小,默認(rèn)為65535腐缤,多于這個(gè)大小的數(shù)據(jù)將不會(huì)被程序記入內(nèi)存捌归、寫入文件。(這個(gè)參數(shù)相當(dāng)于tcpdump的-s岭粤,tcpdump默認(rèn)抓包的大小僅為68)
-p 設(shè)置網(wǎng)絡(luò)接口以非混合模式工作惜索,即只關(guān)心和本機(jī)有關(guān)的流量。
-B 設(shè)置內(nèi)核緩沖區(qū)大小剃浇,僅對windows有效巾兆。
-y 設(shè)置抓包的數(shù)據(jù)鏈路層協(xié)議,不設(shè)置則默認(rèn)為-L找到的第一個(gè)協(xié)議虎囚,局域網(wǎng)一般是EN10MB等角塑。
-L 列出本機(jī)支持的數(shù)據(jù)鏈路層協(xié)議,供-y參數(shù)使用淘讥。
抓包進(jìn)度控制
-c 抓取的packet數(shù)圃伶,在處理一定數(shù)量的packet后,停止抓取蒲列,程序退出窒朋。
-a 設(shè)置tshark抓包停止向文件書寫的條件,事實(shí)上是tshark在正常啟動(dòng)之后停止工作并返回的條件蝗岖。條件寫為test:value的形式侥猩,如“-a duration:5”表示tshark啟動(dòng)后在5秒內(nèi)抓包然后停止;“-a filesize:10”表示tshark在輸出文件達(dá)到10kB后停止抵赢;“-a files:n”表示tshark在寫滿n個(gè)文件后停止欺劳。
文件控制
-b 設(shè)置ring buffer文件參數(shù)唧取。
ring buffer的文件名由-w參數(shù)決定。-b參數(shù)采用test:value的形式書寫划提》愕埽“-b duration:5”表示每5秒寫下一個(gè)ring buffer文件;“-b filesize:5”表示每達(dá)到5kB寫下一個(gè)ring buffer文件腔剂;“-b files:7”表示ring buffer文件最多7個(gè)媒区,周而復(fù)始地使用驼仪,如果這個(gè)參數(shù)不設(shè)定掸犬,tshark會(huì)將磁盤寫滿為止。
-r 設(shè)置tshark分析的輸入文件绪爸。tshark既可以抓取分析即時(shí)的網(wǎng)絡(luò)流量湾碎,又可以分析dump在文件中的數(shù)據(jù)。-r不能是命名管道和標(biāo)準(zhǔn)輸入奠货。
過濾處理
-R 設(shè)置讀冉槿臁(顯示)過濾表達(dá)式(read filter expression)。不符合此表達(dá)式的流量同樣不會(huì)被寫入文件递惋。注意柔滔,讀取(顯示)過濾表達(dá)式的語法和底層相關(guān)的抓包過濾表達(dá)式語法不相同萍虽。類似于抓包過濾表達(dá)式睛廊,在命令行使用時(shí)最好將它們quote起來。
-n 禁止所有地址名字解析(默認(rèn)為允許所有)杉编。
-N 啟用某一層的地址名字解析超全。“m”代表MAC層邓馒,“n”代表網(wǎng)絡(luò)層嘶朱,“t”代表傳輸層,“C”代表當(dāng)前異步DNS查找光酣。如果-n和-N參數(shù)同時(shí)存在疏遏,-n將被忽略。如果-n和-N參數(shù)都不寫救军,則默認(rèn)打開所有地址名字解析财异。
-d 將指定的數(shù)據(jù)按有關(guān)協(xié)議解包輸出。如要將tcp 8888端口的流量按http解包缤言,應(yīng)該寫為“-d tcp.port==8888,http”宝当。注意選擇子和解包協(xié)議之間不能留空格。
輸出格式
-w 設(shè)置raw數(shù)據(jù)的輸出文件胆萧。這個(gè)參數(shù)不設(shè)置庆揩,tshark將會(huì)把解碼結(jié)果輸出到stdout俐东。“-w-”表示把raw輸出到stdout订晌。如果要把解碼結(jié)果輸出到文件虏辫,使用重定向“>”而不要-w參數(shù)。
-F 設(shè)置輸出raw數(shù)據(jù)的格式锈拨,默認(rèn)為libpcap砌庄。“tshark -F”會(huì)列出所有支持的raw格式奕枢。
-V 設(shè)置將解碼結(jié)果的細(xì)節(jié)輸出娄昆,否則解碼結(jié)果僅顯示一個(gè)packet一行的summary。
-x 設(shè)置在解碼輸出結(jié)果中缝彬,每個(gè)packet后面以HEX dump的方式顯示具體數(shù)據(jù)萌焰。
-T 設(shè)置解碼結(jié)果輸出的格式,包括text,ps,psml和pdml谷浅,默認(rèn)為text扒俯。
-t 設(shè)置解碼結(jié)果的時(shí)間格式∫环瑁“ad”表示帶日期的絕對時(shí)間撼玄,“a”表示不帶日期的絕對時(shí)間,“r”表示從第一個(gè)包到現(xiàn)在的相對時(shí)間墩邀,“d”表示兩個(gè)相鄰包之間的增量時(shí)間(delta)掌猛。
-S 在向raw文件輸出的同時(shí),將解碼結(jié)果打印到控制臺(tái)磕蒲。
-l 在處理每個(gè)包時(shí)即時(shí)刷新輸出留潦。
-X 擴(kuò)展項(xiàng)。
-q 設(shè)置安靜的stdout輸出(例如做統(tǒng)計(jì)時(shí))
-z 設(shè)置統(tǒng)計(jì)參數(shù)辣往。
其它
-h 顯示命令行幫助兔院。
-v 顯示tshark的版本信息。
-o 重載選項(xiàng)站削。
基本用法
在linux下安裝(debian或ubuntu)
sudo apt-get install tshark
安裝完成后在抓包之前坊萝,可以先檢查版本、查看幫助等了解tshark初步了解
查看tshark版本
tshark -v
列出當(dāng)前存在的網(wǎng)絡(luò)接口
tshark -D
網(wǎng)卡描述依據(jù)OS有不同的編號方式许起,在不了解網(wǎng)絡(luò)設(shè)備及編號情況下十偶,一般先用“tshark -D”查看網(wǎng)絡(luò)接口的編號以供-i參數(shù)使用。
注: linux可以結(jié)合ifconfig命令查看
tshark對指定網(wǎng)卡監(jiān)聽园细,抓包
sudo tshark -i <interface>
抓取網(wǎng)卡eth0的流量并寫入capture123.pcap
tshark -i eth0 -w capture123.pcap
讀取之前的文件capture123.pcap
tshark -i eth0 -r capture123.pcap
抓取網(wǎng)卡eth0的流量10分鐘
tshark -i eth0 -a duration:600
注: 默認(rèn)時(shí)間單位為秒
抓取網(wǎng)卡eth0的10000個(gè)數(shù)據(jù)包
tshark -c 10000 -i eth0
抓取網(wǎng)卡eth0涉及192.168.1.1的流量報(bào)文
tshark -i eth0 -f “host 192.168.1.1”
注: 與wireshark惦积、tcpdump一致,均使用BPF過濾表達(dá)式
抓取網(wǎng)卡eth0指定協(xié)議的流量報(bào)文
tshark -i eth0 -f “<協(xié)議名>”
協(xié)議名可以為: tcp, udp, dns, icmp, http等
案例
實(shí)時(shí)打印當(dāng)前mysql查詢語句
tshark -s 512 -i eth1 -n -f 'tcp dst port 3306' -R 'mysql.query' -T fields -e mysql.query
說明:
- -s 512 :只抓取前512個(gè)字節(jié)數(shù)據(jù)
- -i eth0 :監(jiān)聽eth0網(wǎng)卡
- -n :禁止域名解析
- -f ‘tcp dst port 3306’ :只捕捉協(xié)議為tcp,目的端口為3306的數(shù)據(jù)包
- -R ‘mysql.query’ :過濾出mysql.query查詢語句的報(bào)文
- -T fields -e mysql.query :打印mysql查詢語句
實(shí)時(shí)打印當(dāng)前http請求的url(包括域名)
tshark -s 512 -i eth1 -n -f 'tcp dst port 8000' -R 'http.host and http.request.uri' -T fields -e http.host -e http.request.uri -l | tr -d '\t'
說明:
- -s 512 :只抓取前512個(gè)字節(jié)數(shù)據(jù)
- -i eth1 :監(jiān)聽eth1網(wǎng)卡
- -n :禁止網(wǎng)絡(luò)對象名稱解析
- -f ‘tcp dst port 8000’ :只捕捉協(xié)議為tcp,目的端口為8000的數(shù)據(jù)包
- -R ‘http.host and http.request.uri’ :過濾出http.host和http.request.uri
- -T fields -e http.host -e http.request.uri :打印http.host和http.request.uri
- -l :輸出到標(biāo)準(zhǔn)輸出
讀取之前抓包文件進(jìn)行報(bào)文數(shù)據(jù)分析
需要從抓包的文件evidence04.pcap中提取出報(bào)文相關(guān)數(shù)據(jù)信息猛频,如時(shí)間狮崩、源IP蛛勉、目的IP、協(xié)議名睦柴、源Port诽凌、標(biāo)Port、包大小等信息坦敌,最后輸出到csv文件侣诵。
tshark -r evidence04.pcap -T fields -e frame.time_relative -e ip.src -e ip.dst -e ip.proto -e tcp.srcport -e tcp.dstport -e frame.len -E header=n -E separator=, -E quote=n -E occurrence=f > output.csv
說明:
-r evidence04.pcap 需要分析的報(bào)文記錄文件(pcap格式)
-T fields 輸出格式,選fields按字段狱窘,也可以選json等其他格式杜顺,需結(jié)合-e 及 -E使用
-e frame.time_relative 取出相對封包時(shí)間的欄位資料
-e ip.src 提取源IP
-e ip.dst 提取目的IP
-e ip.proto 提取協(xié)議名
-e tcp.srcport 提取源Port
-e tcp.dstport 提取目的Port
-e frame.len 提取包大小
-E header=n 是否輸出字段名稱(cvs的第1行)
-E separator=, 指定分割符,/t是tab训柴,/s是一格空格
-E quote=n 指定是否對字段用引號哑舒,d是雙引號,s是單引號幻馁,n是不用
-E occurrence=f 多值時(shí)是否保留,f是第一個(gè)值越锈,l是最后一個(gè)值仗嗦,a是所有值都列出,默認(rèn)全部
> output.csv 輸出文件路徑及名稱
參考:
本文使用知識(shí)共享協(xié)議:署名-非商業(yè)性使用-相同方式共享 (BY-NC-SA 4.0) 協(xié)議