tshark:出力フォーマットをfieldsに変更
通常、tsharkコマンドを実行すると以下のような形式で出力が得られます。
$ tshark -r test.pcap -Y "http.response" 12 0.270305 104.20.31.112 → 192.168.164.128 HTTP 1442 HTTP/1.1 200 OK (text/html) 55 0.329930 104.20.31.112 → 192.168.164.128 HTTP 789 HTTP/1.1 200 OK (GIF89a) 65 0.333970 104.20.31.112 → 192.168.164.128 HTTP 1134 HTTP/1.1 200 OK (GIF89a) 73 0.351571 104.20.31.112 → 192.168.164.128 HTTP 1074 HTTP/1.1 200 OK (text/css) 109 0.573289 104.31.66.122 → 192.168.164.128 HTTP 640 HTTP/1.1 200 OK (text/html) 137 0.622275 202.32.15.217 → 192.168.164.128 HTTP 1026 HTTP/1.1 200 OK (GIF87a) 149 0.675307 52.196.10.155 → 192.168.164.128 HTTP 1328 HTTP/1.1 200 OK (text/javascript) (省略)
tsharkの-Tオプションでfieldsを指定すれば自分が必要な情報だけを出力するようにフォーマットを変更できます。この時、-eオプションにフィールド名を指定することで出力する情報を設定します。具体的なコマンドは以下のようになります。
$ tshark -r pcapファイル -T fields -e フィールド名1 -e フィールド名2
フィールド名はフィルタに設定できる「ip.addr」や「tcp.dstport」などです。ちなみに、パケット中に指定したフィールドが存在しない場合、その部分には何も出力されません。
具体例として、HTTPレスポンスの送信元IPアドレス、Content-Type、Content-Lengthだけを出力させるようにしてみます。この場合はtsharkの出力結果をtsvファイルとして保存しています。
$ tshark -r test.pcap -Y "http.response" -T fields -e ip.src -e http.content_type -e http.content_length > test.tsv
test.tsvの中身は以下のようになります。
104.20.31.112 text/html 104.20.31.112 image/gif 1787 104.20.31.112 image/gif 19990 104.20.31.112 text/css 104.31.66.122 text/html 202.32.15.217 image/gif 15782 52.196.10.155 text/javascript 966 (省略)
-Eオプションでheaderを指定すればフィールド名をヘッダとして出力させることもできます。また、区切り文字をタブ以外の文字にしたい場合は-Eオプションでseparatorを指定します。下記コマンドではヘッダの出力と区切り文字に「,」を使うことを指定し、出力結果をtest.csvファイルに保存しています。
$ tshark -r test.pcap -Y "http.response" -T fields -E header=y -E separator=, -e ip.src -e http.content_type -e http.content_length > test.csv
test.csvの中身は以下のようになります。
ip.src,http.content_type,http.content_length 104.20.31.112,text/html, 104.20.31.112,image/gif,1787 104.20.31.112,image/gif,19990 104.20.31.112,text/css, 104.31.66.122,text/html, 202.32.15.217,image/gif,15782 52.196.10.155,text/javascript,966 (省略)