tsharkでpcapファイルからHTTP情報を抽出する

Wiresharkには、Wiresharkと同等の機能を持つCLIコマンドとしてtsharkが付属している。 tsharkではオプションとして-T fields -e <field> [-e <field> ...]を指定することで、指定したフィールドのデータをタブ区切りで出力することができる。

次の例では、dump.pcapというファイルから対象をHTTPのみに絞り込んだ上で、エポック秒、送信元・送信先のIPアドレスTCPポート番号および各種HTTP情報を書き出す。

$ tshark -r dump.pcap -T fields -e frame.time_epoch -e ip.src -e tcp.srcport -e ip.dst -e tcp.dstport -e http.request.method -e http.request.uri -e http.host -e http.user_agent -e http.response.code -e http.server -e http.content_type -e http.content_length "http"
1436986529.646386000    10.0.2.15       45616   183.79.235.148  80      GET     /       www.yahoo.co.jp Wget/1.15 (linux-gnu)
1436986529.700081000    183.79.235.148  80      10.0.2.15       45616                                   200     nginx   text/html; charset=UTF-8
1436986529.759357000    10.0.2.15       53979   124.83.230.249  80      GET     /robots.txt     k.yimg.jp       Wget/1.15 (linux-gnu)
1436986529.815389000    124.83.230.249  80      10.0.2.15       53979                                   404     YTS/1.20.10     text/html; charset=iso-8859-1
1436986529.854421000    10.0.2.15       36326   124.83.254.251  80      GET     /robots.txt     lpt.c.yimg.jp   Wget/1.15 (linux-gnu)
1436986529.928312000    124.83.254.251  80      10.0.2.15       36326                                   404     ATS     text/html; charset=utf-8        162
1436986529.964301000    10.0.2.15       53981   124.83.230.249  80      GET     /robots.txt     i.yimg.jp       Wget/1.15 (linux-gnu)
1436986530.004200000    124.83.230.249  80      10.0.2.15       53981                                   404     YTS/1.20.10     text/html; charset=iso-8859-1   3231
1436986530.005313000    10.0.2.15       53981   124.83.230.249  80      GET     /images/clear.gif       k.yimg.jp       Wget/1.15 (linux-gnu)
1436986530.022590000    124.83.230.249  80      10.0.2.15       53981                                   200     YTS/1.20.10     image/gif       43
1436986530.025674000    10.0.2.15       53981   124.83.230.249  80      GET     /images/top/sp/cgrade/logo-mh-150217.gif        k.yimg.jp       Wget/1.15 (linux-gnu)
1436986530.059537000    124.83.230.249  80      10.0.2.15       53981                                   200     YTS/1.20.10     image/gif       6150
1436986530.061766000    10.0.2.15       53981   124.83.230.249  80      GET     /images/top/searchbox/s_w-140325.gif    k.yimg.jp       Wget/1.15 (linux-gnu)
1436986530.078845000    124.83.230.249  80      10.0.2.15       53981                                   200     YTS/1.20.10     image/gif       264
1436986530.080611000    10.0.2.15       53981   124.83.230.249  80      GET     /images/top/searchbox/s_i-140325.gif    k.yimg.jp       Wget/1.15 (linux-gnu)
1436986530.101198000    124.83.230.249  80      10.0.2.15       53981                                   200     YTS/1.20.10     image/gif       233
1436986530.102426000    10.0.2.15       53981   124.83.230.249  80      GET     /images/top/searchbox/s_m-140325.gif    k.yimg.jp       Wget/1.15 (linux-gnu)
1436986530.126180000    124.83.230.249  80      10.0.2.15       53981                                   200     YTS/1.20.10     image/gif       237
1436986530.127047000    10.0.2.15       53981   124.83.230.249  80      GET     /images/top/searchbox/s_d-140325.gif    k.yimg.jp       Wget/1.15 (linux-gnu)
1436986530.143635000    124.83.230.249  80      10.0.2.15       53981                                   200     YTS/1.20.10     image/gif       225
1436986530.150385000    10.0.2.15       53981   124.83.230.249  80      GET     /images/top/searchbox/s_k-140325.gif    k.yimg.jp       Wget/1.15 (linux-gnu)
1436986530.177203000    124.83.230.249  80      10.0.2.15       53981                                   200     YTS/1.20.10     image/gif       245
1436986530.180516000    10.0.2.15       53981   124.83.230.249  80      GET     /images/top/searchbox/s_mp-140325.gif   k.yimg.jp       Wget/1.15 (linux-gnu)
1436986530.197362000    124.83.230.249  80      10.0.2.15       53981                                   200     YTS/1.20.10     image/gif       237
1436986530.198396000    10.0.2.15       53981   124.83.230.249  80      GET     /images/common/tv.gif   k.yimg.jp       Wget/1.15 (linux-gnu)
1436986530.218191000    124.83.230.249  80      10.0.2.15       53981                                   200     YTS/1.20.10     image/gif       341
1436986530.219691000    10.0.2.15       53981   124.83.230.249  80      GET     /images/icon/photo.gif  k.yimg.jp       Wget/1.15 (linux-gnu)
1436986530.238256000    124.83.230.249  80      10.0.2.15       53981                                   200     YTS/1.20.10     image/gif       360
1436986530.240735000    10.0.2.15       53981   124.83.230.249  80      GET     /images/new2.gif        k.yimg.jp       Wget/1.15 (linux-gnu)
1436986530.258350000    124.83.230.249  80      10.0.2.15       53981                                   200     YTS/1.20.10     image/gif       111
1436986530.274762000    10.0.2.15       36328   124.83.254.251  80      GET     /im_siggfsXBwwG4fZVOAjOlg94Z.g---x120-y120/amd/20150715-00000060-asahi-000-view.jpg     lpt.c.yimg.jp   Wget/1.15 (linux-gnu)
1436986530.292408000    124.83.254.251  80      10.0.2.15       36328                                   200     ATS     image/jpeg      8486
1436986530.310006000    10.0.2.15       53983   124.83.230.249  80      GET     /images/top/sp/cgrade/pb_bg.gif k.yimg.jp       Wget/1.15 (linux-gnu)
1436986530.329179000    124.83.230.249  80      10.0.2.15       53983                                   200     YTS/1.20.10     image/gif       94
1436986530.330416000    10.0.2.15       53983   124.83.230.249  80      GET     /images/top/sp/cgrade/info_btn-140325.gif       k.yimg.jp       Wget/1.15 (linux-gnu)
1436986530.349955000    124.83.230.249  80      10.0.2.15       53983                                   200     YTS/1.20.10     image/gif       229
1436986530.351301000    10.0.2.15       53983   124.83.230.249  80      GET     /images/top/sp/cgrade/iconMail.gif      k.yimg.jp       Wget/1.15 (linux-gnu)
1436986530.370669000    124.83.230.249  80      10.0.2.15       53983                                   200     YTS/1.20.10     image/gif       209
1436986530.371757000    10.0.2.15       53983   124.83.230.249  80      GET     /images/sicons/ybm161.gif       k.yimg.jp       Wget/1.15 (linux-gnu)
1436986530.390212000    124.83.230.249  80      10.0.2.15       53983                                   200     YTS/1.20.10     image/gif       282
1436986530.391321000    10.0.2.15       53983   124.83.230.249  80      GET     /images/sicons/box16.gif        i.yimg.jp       Wget/1.15 (linux-gnu)
1436986530.408870000    124.83.230.249  80      10.0.2.15       53983                                   200     YTS/1.20.10     image/gif       256
1436986530.410496000    10.0.2.15       53983   124.83.230.249  80      GET     /images/top/sp/cgrade/icon_point.gif    k.yimg.jp       Wget/1.15 (linux-gnu)
1436986530.429079000    124.83.230.249  80      10.0.2.15       53983                                   200     YTS/1.20.10     image/gif       100

最後の"http"は出力する対象をHTTPデータのみに絞り込むフィルタである。 また、対応するフィールドがないものは空文字列として扱われる。

フィールド名の一覧は下記のリファレンスにある。

HTTPに限らず、DNSなど他のプロトコルでも同様にして必要なフィールドのみを選択してタブ区切りで抽出することが可能である。 pcapのファイルサイズが非常に大きくWiresharkでの表示に時間がかかる場合や、他のスクリプトから解析結果を利用したい場合などに便利。