無能が苦悩したメモ

無能な著者が学んだことを忘れないための覚え書きです...

tshark:出力フォーマットをfieldsに変更

通常、tsharkコマンドを実行すると以下のような形式で出力が得られます。

$ tshark -r test.pcap -Y "http.response"
   12   0.270305 104.20.31.112192.168.164.128 HTTP 1442 HTTP/1.1 200 OK  (text/html)
   55   0.329930 104.20.31.112192.168.164.128 HTTP 789 HTTP/1.1 200 OK  (GIF89a)
   65   0.333970 104.20.31.112192.168.164.128 HTTP 1134 HTTP/1.1 200 OK  (GIF89a)
   73   0.351571 104.20.31.112192.168.164.128 HTTP 1074 HTTP/1.1 200 OK  (text/css)
  109   0.573289 104.31.66.122192.168.164.128 HTTP 640 HTTP/1.1 200 OK  (text/html)
  137   0.622275 202.32.15.217192.168.164.128 HTTP 1026 HTTP/1.1 200 OK  (GIF87a)
  149   0.675307 52.196.10.155192.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
 (省略)