網絡分析利器wireshark命令版(2):tshark使用示例

tshark是wireshark網絡分析工具下的一個分支,主要用於命令行環境進行抓包、分析,尤爲對協議深層解析時,tcpdump難以勝任的場景中。本系列文章將整理介紹tshark相關內容。html

基本用法

經常使用命令

  • 查看tshark版本
tshark -v
  • 列出當前存在的網絡接口
tshark -D
網卡描述依據OS有不一樣的編號方式,在不瞭解網絡設備及編號狀況下,通常先用「tshark -D」查看網絡接口的編號以供-i參數使用。
注: linux能夠結合ifconfig命令查看
  • tshark對指定網卡監聽,抓包
sudo tshark -i <interface>
  • 抓取網卡eth0的流量並寫入capture123.pcap
tshark -i eth0 -w capture123.pcap
  • 讀取以前的文件capture123.pcap
tshark -i eth0 -r capture123.pcap
  • 抓取網卡eth0的流量10分鐘
tshark -i eth0 -a duration:600

注: 默認時間單位爲秒mysql

  • 抓取網卡eth0的10000個數據包
tshark -c 10000 -i eth0
  • 抓取網卡eth0涉及192.168.1.1的流量報文
tshark -i eth0 -f 「host 192.168.1.1」
注: 與wireshark、tcpdump一致,均使用BPF過濾表達式
  • 抓取網卡eth0指定協議的流量報文
tshark -i eth0 -f 「<協議名>」
協議名能夠爲: tcp, udp, dns, icmp, http等

案例

實時打印當前mysql查詢語句

tshark -s 512 -i eth1 -n -f 'tcp dst port 3306' -R 'mysql.query' -T fields -e mysql.query

說明:linux

  • -s 512 :只抓取前512個字節數據
  • -i eth0 :監聽eth0網卡
  • -n :禁止域名解析
  • -f ‘tcp dst port 3306’ :只捕捉協議爲tcp,目的端口爲3306的數據包
  • -R ‘mysql.query’ :過濾出mysql.query查詢語句的報文
  • -T fields -e mysql.query :打印mysql查詢語句

實時打印當前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'

說明:sql

  • -s 512 :只抓取前512個字節數據
  • -i eth1 :監聽eth1網卡
  • -n :禁止網絡對象名稱解析
  • -f ‘tcp dst port 8000’ :只捕捉協議爲tcp,目的端口爲8000的數據包
  • -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 :輸出到標準輸出

讀取以前抓包文件進行報文數據分析

須要從抓包的文件evidence04.pcap中提取出報文相關數據信息,如時間、源IP、目的IP、協議名、源Port、標Port、包大小等信息,最後輸出到csv文件。shell

tshark -r evidence.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

說明:json

  • -r evidence.pcap 須要分析的報文記錄文件(pcap格式)
  • -T fields 輸出格式,選fields按字段,也能夠選json等其餘格式,需結合-e 及 -E使用
  • -e frame.time_relative 取出封包的相對時間
  • -e ip.src 提取源IP
  • -e ip.dst 提取目的IP
  • -e ip.proto 提取協議名
  • -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 多值時是否保留,f是第一個值,l是最後一個值,a是全部值都列出,默認所有
  • output.csv 輸出文件路徑及名稱

DNS報文過濾

使用tshark過濾dns cap包中源ip、目的ip、request請求segmentfault

tshark -r test.cap -T fields -e frame.time -e ip.src -e ip.dst -e dns.qry.name -R 'udp.dstport==53 || dns'

說明:網絡

  • -r test.pcap 須要分析的報文記錄文件(pcap格式)
  • -T fields 輸出格式,選fields按字段,也能夠選json等其餘格式,需結合-e 及 -E使用
  • -e frame.time 提取數據幀時間
  • -e ip.src 提取源IP
  • -e ip.dst 提取目的IP
  • -e dns.qry.name 提取dns查詢的域名信息
  • -R 'udp.dstport==53 || dns' 顯示過濾,僅對udp目標端口爲53或者dns協議的報文進行處理
  • 默認直接顯示在終端上,不記錄文件。

常見問題

tshark: Only read filters, not capture filters, can be specified when reading a capture file.

tshark -r 20190409.pcap -f 'udp' -w udp-20190409.pcap

讀取文件時只能使用顯示過濾,也就是隻能使用-Y-2 -R過濾tcp

tshark: -R without -2 is deprecated. For single-pass filtering use -Y.

tshark -r 20190409.pcap -R 'udp' -w udp-20190409.pcap

顯示過濾-R參數須要和-2一塊兒使用,或使用-Yide

參考:

系列文章:

相關文章
相關標籤/搜索