tshark是命令行抓包工具
tshark filter field reference
tcp protocol fields mysql protocol fields http protocol fields memcache protocol fields Java RMI fields RSYNC File Synchroniser protocol fields
thrift protocol fields amqp(eg .RabbitMQ) protocol fields Mongo Wire Protocol (mongoDB) fields
fastcgi,udp,snmp,ip,rsync,ssh,ssl,json etc.
capture Filters reference
pcap filter reference
部分示例:
//打印http協議流相關信息 tshark -s 512 -i eth0 -n -f 'tcp dst port 80' -R 'http.host and http.request.uri' -T fields -e http.host -e http.request.uri -l | tr -d '\t' 注釋: -s: 只抓取前512字節; -i: 捕獲eth0網卡; -n: 禁止網絡對象名稱解析; -f: 只捕獲協議為tcp,目的端口為80; -R: 過濾出http.host和http.request.uri; -T,-e: 指的是打印這兩個字段; -I: 輸出到命令行界面; //實時打印當前mysql查詢語句 tshark -s 512 -i eth0 -n -f 'tcp dst port 3306' -R 'mysql.query' -T fields -e mysql.query 注釋: -R: 過濾出mysql的查詢語句; //導出smpp協議header和value的例子 tshark -r test.cap -R '(smpp.command_id==0x80000004) and (smpp.command_status==0x0)' -e smpp.message_id -e frame.time -T fields -E header=y >test.txt 注釋: -r: 讀取本地文件,可以先抓包存下來之后再進行分析; -R: smpp...可以在wireshark的過濾表達式里面找到,后面會詳細介紹; -E: 當-T字段指定時,設置輸出選項,header=y意思是頭部要打印; -e: 當-T字段指定時,設置輸出哪些字段; >: 重定向; //統計http狀態 tshark -n -q -z http,stat, -z http,tree 注釋: -q: 只在結束捕獲時輸出數據,針對於統計類的命令非常有用; -z: 各類統計選項,具體的參考文檔,后面會介紹,可以使用tshark -z help命令來查看所有支持的字段; http,stat: 計算HTTP統計信息,顯示的值是HTTP狀態代碼和HTTP請求方法。 http,tree: 計算HTTP包分布。 顯示的值是HTTP請求模式和HTTP狀態代碼。 //抓取500個包提取訪問的網址打印出來 tshark -s 0 -i eth0 -n -f 'tcp dst port 80' -R 'http.host and http.request.uri' -T fields -e http.host -e http.request.uri -l -c 500 注釋: -f: 抓包前過濾; -R: 抓包后過濾; -l: 在打印結果之前清空緩存; -c: 在抓500個包之后結束; //顯示ssl data數據 tshark -n -t a -R ssl -T fields -e "ip.src" -e "ssl.app_data" //讀取指定報文,按照ssl過濾顯示內容 tshark -r temp.cap -R "ssl" -V -T text 注釋: -T text: 格式化輸出,默認就是text; -V: 增加包的輸出;//-q 過濾tcp流13,獲取data內容 tshark -r temp.cap -z "follow,tcp,ascii,13" //按照指定格式顯示-e tshark -r temp.cap -R ssl -Tfields -e "ip.src" -e tcp.srcport -e ip.dst -e tcp.dstport //輸出數據 tshark -r vmx.cap -q -n -t ad -z follow,tcp,ascii,10.1.8.130:56087,10.195.4.41:446 | more 注釋: -t ad: 輸出格式化時間戳; //過濾包的時間和rtp.seq tshark -i eth0 -f "udp port 5004" -T fields -e frame.time_epoch -e rtp.seq -o rtp.heuristic_rtp:true 1>test.txt 注釋: -o: 覆蓋屬性文件設置的一些值; //提取各協議數據部分 tshark -r H:/httpsession.pcap -q -n -t ad -z follow,tcp,ascii,71.6.167.142:27017,101.201.42.120:59381 | more
選項介紹:
在命令行下可以使用tshark -help得到選項的簡單介紹,具體的需要查閱官方文檔https://www.wireshark.org/docs/man-pages/tshark.html
捕獲接口: -i: -i <interface> 指定捕獲接口,默認是第一個非本地循環接口; -f: -f <capture filter> 設置抓包過濾表達式,遵循libpcap過濾語法,這個實在抓包的過程中過濾,如果是分析本地文件則用不到。 -s: -s <snaplen> 設置快照長度,用來讀取完整的數據包,因為網絡中傳輸有65535的限制,值0代表快照長度65535,默認也是這個值; -p: 以非混合模式工作,即只關心和本機有關的流量。 -B: -B <buffer size> 設置緩沖區的大小,只對windows生效,默認是2M; -y: -y<link type> 設置抓包的數據鏈路層協議,不設置則默認為-L找到的第一個協議,局域網一般是EN10MB等; -D: 打印接口的列表並退出; -L 列出本機支持的數據鏈路層協議,供-y參數使用。 捕獲停止選項: -c: -c <packet count> 捕獲n個包之后結束,默認捕獲無限個; -a: -a <autostop cond.> ... duration:NUM,在num秒之后停止捕獲; filesize:NUM,在numKB之后停止捕獲; files:NUM,在捕獲num個文件之后停止捕獲; 捕獲輸出選項: -b <ringbuffer opt.> ... ring buffer的文件名由-w參數決定,-b參數采用test:value的形式書寫; duration:NUM - 在NUM秒之后切換到下一個文件; filesize:NUM - 在NUM KB之后切換到下一個文件; files:NUM - 形成環形緩沖,在NUM文件達到之后; RPCAP選項: remote packet capture protocol,遠程抓包協議進行抓包; -A: -A <user>:<password>,使用RPCAP密碼進行認證; 輸入文件: -r: -r <infile> 設置讀取本地文件 處理選項: -2: 執行兩次分析 -R: -R <read filter>,包的讀取過濾器,可以在wireshark的filter語法上查看;在wireshark的視圖->過濾器視圖,在這一欄點擊表達式,就會列出來對所有協議的支持。 -Y: -Y <display filter>,使用讀取過濾器的語法,在單次分析中可以代替-R選項; -n: 禁止所有地址名字解析(默認為允許所有) -N: 啟用某一層的地址名字解析。“m”代表MAC層,“n”代表網絡層,“t”代表傳輸層,“C”代表當前異步DNS查找。如果-n和-N參數同時存在,-n將被忽略。如果-n和-N參數都不寫,則默認打開所有地址名字解析。 -d: 將指定的數據按有關協議解包輸出,如要將tcp 8888端口的流量按http解包,應該寫為“-d tcp.port==8888,http”;tshark -d. 可以列出所有支持的有效選擇器。 輸出選項: -w: -w <outfile|-> 設置raw數據的輸出文件。這個參數不設置,tshark將會把解碼結果輸出到stdout,“-w -”表示把raw輸出到stdout。如果要把解碼結果輸出到文件,使用重定向“>”而不要-w參數。 -F: -F <output file type>,設置輸出的文件格式,默認是.pcapng,使用tshark -F可列出所有支持的輸出文件類型。 -V: 增加細節輸出; -O: -O <protocols>,只顯示此選項指定的協議的詳細信息。 -P: 即使將解碼結果寫入文件中,也打印包的概要信息; -S: -S <separator> 行分割符 -x: 設置在解碼輸出結果中,每個packet后面以HEX dump的方式顯示具體數據。 -T: -T pdml|ps|text|fields|psml,設置解碼結果輸出的格式,包括text,ps,psml和pdml,默認為text -e: 如果-T fields選項指定,-e用來指定輸出哪些字段; -E: -E <fieldsoption>=<value>如果-T fields選項指定,使用-E來設置一些屬性,比如 header=y|n separator=/t|/s|<char> occurrence=f|l|a aggregator=,|/s|<char> -t: -t a|ad|d|dd|e|r|u|ud 設置解碼結果的時間格式。“ad”表示帶日期的絕對時間,“a”表示不帶日期的絕對時間,“r”表示從第一個包到現在的相對時間,“d”表示兩個相鄰包之間的增量時間(delta)。 -u: s|hms 格式化輸出秒; -l: 在輸出每個包之后flush標准輸出 -q: 結合-z選項進行使用,來進行統計分析; -X: <key>:<value> 擴展項,lua_script、read_format,具體參見 man pages; -z:統計選項,具體的參考文檔;tshark -z help,可以列出,-z選項支持的統計方式。 其他選項: -h: 顯示命令行幫助; -v: 顯示tshark 的版本信息;
部分命令測試:
C:\Users\sdut>tshark -r H:\httpsession.pcap -T fields -e frame.number -e frame.protocols -E header=y --輸出 frame.number frame.protocols 1 eth:ethertype:ip:tcp 2 eth:ethertype:ip:tcp 3 eth:ethertype:ip:tcp 4 eth:ethertype:ip:tcp:http 5 eth:ethertype:ip:tcp 6 eth:ethertype:ip:tcp:http:data-text-lines 7 eth:ethertype:ip:tcp 8 eth:ethertype:ip:tcp 9 eth:ethertype:ip:tcp -e frame.number:顯示幀序號 -e frame.time: 顯示時間,時間格式為 Sep 21, 2016 17:20:02.233249000 中國標准時間 -e frame.protocols: 顯示此數據包使用的協議 -e ip.src: 顯示源ip,但是不能跟frame一起用 -e ip.dst: 顯示目的ip地址; -e tcp.port: 顯示端口號。 ......還有很多,針對需求,一方面可以自己通過wireshark軟件顯示的頭部字段來猜測,另一方面可以查閱文檔,https://www.wireshark.org/docs/dfref/,這里面列出了所有支持的-e字段寫法,可以在里面搜索ip、frame上面我們使用的這幾個就會搜到。 //2.示例2 C:\Users\sdut>tshark -2 -r H:\httpsession.pcap -R "http.request.line || http.file_data || http.response.line" -T fields -e http.request.line -e http.file_data -e http.response.line -E header=y 輸出:該例子輸出http協議的請求頭,響應頭,和響應數據; http.request.line http.file_data http.response.line ...... ...... ...... 具體的這個-R過濾寫法,可以查看文檔,根據自己的需求來。https://wiki.wireshark.org/DisplayFilters //3.示例3 使用windows版本的tshark,抓包存儲到本地。每個包只讀取1024字節。 tshark -w E:/1015.pcap -s 1024 -i 本地連接 -q -F pcap
參考文獻
tshark官方文檔:https://www.wireshark.org/docs/man-pages/tshark.html
wireshark wiki:https://wiki.wireshark.org/
捕獲過濾器 https://wiki.wireshark.org/CaptureFilters
顯示過濾器,用於display過濾的字段可以通過https://wiki.wireshark.org/DisplayFilters 查詢。如果不過濾-e指定的字段數據都會輸出,通過-R過濾之后,只有滿足規則的才會輸出,會因此-R和-T、-e通常會一起使用。
1 抓取HTTP
tshark -i en0 -Y http.request -T fields -e http.host -e http.user_agent
2 抓取DNS解析
tshark -i en0 -f "src port 53" -n -T fields -e dns.qry.name
3 抓取pppoe認證的帳號和密碼
tshark -i eth0 -Y "pap.password" -l -T fields -e pap.peer_id -e pap.password | tee -a pap.log
4 抓取PPPOE,帳號,獲取分配的IP地址
tshark -i "nic2" -f "pppoes" -Y "pap or chap.code == 0x02 or chap.code == 0x03 or ipcp[0] == 0x03 " -T fields -e frame.time -e eth.src -e eth.dst -e ipcp.opt.ip_address -e chap.name -e chap.message -e pap.peer_id -e pap.message
5 抓取DNS
tshark -i ppp0 -T fields -e frame.time -e ip.src -e ip.dst -e dns.qry.name -R 'udp.dstport==53||dns'