tsharkのインストールとフィルタ・自動停止オプションの使い方まとめ


投稿日:2014年10月14日
  • 9
  • 0
  • 24



通信の中身まで解析したいならtshark

tshark

通信量を把握するだけなら「以前紹介したdstat」が向いています。
このページでは更に細かく通信の内容を知りたいときに利用するtsharkについて解説します。

tsharkは通信の状態をGUIで解析することのできるWiresharkのCUI版です。Wiresharkのようにグラフ化して解析ということはできませんが、コマンドライン上でパケットの詳細な中身を見ることができます。

Wireshark公式サイト

WiresharkにはWindows版やMac版もあるので興味のある方は以下のリンクからダウンロードしてみてください。利用しているアプリが変な通信をしていないかといった監視をすることができます。
http://sourceforge.net/projects/wireshark/files/


tsharkのインストール

早速Cent OS6にインストールします。
Cent OS公式リポジトリで提供されているのでyumで簡単にインストールできます。

# yum install wireshark
(省略)
Dependencies Resolved

================================================================================
 Package      Arch      Version                                Repository  Size
================================================================================
Installing:
 wireshark    x86_64    1.8.10-7.el6_5                         updates     11 M
Installing for dependencies:
 libpcap      x86_64    14:1.4.0-1.20130826git2dbcaa1.el6      base       130 k
 libsmi       x86_64    0.4.8-4.el6                            base       2.4 M

Transaction Summary
================================================================================
Install       3 Package(s)

簡単ですね。


tsharkの使い方

こちらも普段wiresharkを利用している方なら至って簡単。
オプションの詳細は公式にあるので参照してみてください。

公式のオプションの解説ページ

と、これで終わっては解説にならないので、一般的な利用方法を解説します。

「-D」オプションでインターフェイスを調べる

# tshark -D
1. eth0
2. nflog (Linux netfilter log (NFLOG) interface)
3. nfqueue (Linux netfilter queue (NFQUEUE) interface)
4. usbmon1 (USB bus number 1)
5. any (Pseudo-device that captures on all interfaces)
6. lo

eth01番であることがわかったのでインターフェイスを指定する「-i」オプションを使ってパケットをキャプチャする
(通信の多いサーバだと大量に表示されるので注意。Ctrl + cで停止します。)

# tshark -i 1
  2.420084 198.162.0.1 -> 198.162.0.1 DNS 81 Standard query 0xe2ce  A aqwiki.net
  2.420782 198.162.0.1 -> 198.162.0.1 DNS 181 Standard query response 0xe2ce  A 198.162.0.1
  2.423057 101.111.73.127 -> 198.162.0.1 TCP 54 59934 > 22454 [ACK] Seq=1 Ack=6849 Win=63824 Len=0
  2.519348 101.111.73.127 -> 198.162.0.1 TCP 150 59934 > 22454 [PSH, ACK] Seq=1 Ack=6849 Win=63824 Len=96
58 packets captured

キャプチャフィルタで表示を限定する

上の表示ではあまりにも表示が多すぎるので目的のパケットを探すだけでも大変です。そこで意図したパケットだけ表示できるようにキャプチャフィルタを利用します。
フィルタは「-f」を付けて利用します。

IPアドレスが101.111.73.127に関するパケットを取得する

# tshark -i 1 -f 'host 101.111.73.127'

port 53に関するパケットを取得する

# tshark -i 1 -f 'port 53'

port 80のtcp通信に関するパケットを取得する

# tshark -i 1 -f 'port 80 and tcp'

www.example.comに関するパケットを取得するが、ポート80のものは取得しない

# tshark -i 1 -f 'host www.example.com and not port 80'

更に詳しいキャプチャフィルタについては公式のキャプチャフィルタのページを参照してください。

ちなみに「-R」とするとWiresharkディスプレイフィルタを利用することができます。しかしあくまでディスプレイフィルタなので実際には全てのパケットを取得しています。
あまりに多くのパケットをキャプチャすると負荷が大きくなるので注意が必要です。

Wiresharkディスプレイフィルタには非常に多くのフィルタが用意されています。こちらも詳細は公式のディスプレイフィルタのページを参照してください。

パケットの詳細を表示する

トラブルがあった際には、パケットのデータリンク層やネットワーク層について調べたい場合もあると思います。そんな時は「-V」オプションを利用します。

これはWiresharkのPacket Detailsに当たる機能です。

DNSに関するパケットの詳細を表示

# tshark -i 1 -V -f 'port 53'

Frame 1: 83 bytes on wire (664 bits), 83 bytes captured (664 bits) on interface 0
    Interface id: 0
    WTAP_ENCAP: 1
    Arrival Time: Sep 16, 2014 14:14:44.924549000 JST
    [Time shift for this packet: 0.000000000 seconds]
    Epoch Time: 1410844484.924549000 seconds
    [Time delta from previous captured frame: 0.000000000 seconds]
    [Time delta from previous displayed frame: 0.000000000 seconds]
    [Time since reference or first frame: 0.000000000 seconds]
    Frame Number: 1
    Frame Length: 83 bytes (664 bits)
    Capture Length: 83 bytes (664 bits)
    [Frame is marked: False]
    [Frame is ignored: False]
    [Protocols in frame: eth:ip:udp:dns]
Ethernet II, Src: Cisco_d8:34:ff (f8:72:ea:d8:34:ff), Dst: Xensourc_4a:04:86 (00:16:3e:4a:04:86)
    Destination: Xensourc_4a:04:86 (00:16:3e:4a:04:86)
        Address: Xensourc_4a:04:86 (00:16:3e:4a:04:86)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
    Source: Cisco_d8:34:ff (f8:72:ea:d8:34:ff)
        Address: Cisco_d8:34:ff (f8:72:ea:d8:34:ff)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
    Type: IP (0x0800)
Internet Protocol Version 4, Src: 202.238.95.14 (202.238.95.14), Dst: 153.122.40.105 (153.122.40.105)
    Version: 4
    Header length: 20 bytes
    Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))
        0000 00.. = Differentiated Services Codepoint: Default (0x00)
        .... ..00 = Explicit Congestion Notification: Not-ECT (Not ECN-Capable Transport) (0x00)
    Total Length: 69
    Identification: 0x6d96 (28054)
    Flags: 0x00
        0... .... = Reserved bit: Not set
        .0.. .... = Don't fragment: Not set
        ..0. .... = More fragments: Not set
    Fragment offset: 0
    Time to live: 52
    Protocol: UDP (17)
    Header checksum: 0x2d32 [correct]
        [Good: True]
        [Bad: False]
    Source: 202.238.95.14 (202.238.95.14)
    Destination: 153.122.40.105 (153.122.40.105)
User Datagram Protocol, Src Port: 6232 (6232), Dst Port: domain (53)
    Source port: 6232 (6232)
    Destination port: domain (53)
    Length: 49
    Checksum: 0x9281 [validation disabled]
        [Good Checksum: False]
        [Bad Checksum: False]
Domain Name System (query)
    Transaction ID: 0x97ad
    Flags: 0x0010 Standard query
        0... .... .... .... = Response: Message is a query
        .000 0... .... .... = Opcode: Standard query (0)
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...0 .... .... = Recursion desired: Don't do query recursively
        .... .... .0.. .... = Z: reserved (0)
        .... .... ...1 .... = Non-authenticated data: Acceptable
    Questions: 1
    Answer RRs: 0
    Authority RRs: 0
    Additional RRs: 1
    Queries
        oxynotes.com: type AAAA, class IN
            Name: oxynotes.com
            Type: AAAA (IPv6 address)
            Class: IN (0x0001)
    Additional records
        : type OPT
            Name: 
            Type: OPT (EDNS0 option)
            UDP payload size: 4096
            Higher bits in extended RCODE: 0x0
            EDNS0 version: 0
            Z: 0x8000
                Bit 0 (DO bit): 1 (Accepts DNSSEC security RRs)
                Bits 1-15: 0x0 (reserved)
            Data length: 0

パケットの中身を表示する

パケットの内容を16進数とアスキーキャラクタで表示します。

WiresharkのPacket Bytesに当たる機能。

DNSに関するパケットの詳細を表示

# tshark -i 1 -x -f 'port 53'

  0.000000 202.216.224.17 -> 153.122.40.105 DNS 82 Standard query 0x1cfe  A sukegra.com

0000  00 16 3e 4a 04 86 f8 72 ea d8 34 ff 08 00 45 00   ..>J...r..4...E.
0010  00 44 f3 35 40 00 f9 11 21 a5 ca d8 e0 11 99 7a   .D.5@...!......z
0020  28 69 35 9f 00 35 00 30 f4 4a 1c fe 00 00 00 01   (i5..5.0.J......
0030  00 00 00 00 00 01 07 73 75 6b 65 67 72 61 03 63   .......sukegra.c
0040  6f 6d 00 00 01 00 01 00 00 29 02 00 00 00 80 00   om.......)......
0050  00 00

キャプチャのファイルへの書き出し

上記のようにパケットの詳細を調べる場合、リアルタイムに出力される内容を視認することは不可能です。
そこでキャプチャしたパケットをファイルに書き出して、後でゆっくりと分析することもできます。
-w」オプションの後に保存ファイルの名前を付けます。(適当なところでCtrl + Cで停止してください)

# tshark -i 1 -w packet

Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
116 ← この数字がキャプチャしたパケット数

ファイルの読込みと統計

保存したパケットは生データのため「-r」オプションでファイルを指定して読み込みます。

packetの読込み

# tshark -r packet

統計を利用した読込み

Wiresharkのような詳細なグラフ化はできませんが、「-z」オプションを使って、簡単な統計を取ることはできます。
ここではファイルに対して「-z」オプションを指定していますが、リアルタイムのパケットに対しても統計表示はできます。

ipベースの統計

# tshark -r packet -z conv,ip

IPv4 Conversations
Filter:
                                               |       <-      | |       ->      | |     Total     |   Rel. Start   |   Duration   |
                                               | Frames  Bytes | | Frames  Bytes | | Frames  Bytes |                |              |
153.122.40.105       <-> 101.111.73.127            12       744      11      1650      23      2394     0.203053000         6.2070
153.122.40.105       <-> 37.58.100.152              8       726       5      4241      13      4967     2.782395000         3.2425
153.122.40.105       <-> 118.14.133.191             6       324       6       324      12       648     1.644933000         0.0590
153.122.40.105       <-> 116.81.119.103             5       275       5       330      10       605     4.910457000         0.5785
153.122.40.105       <-> 69.163.209.122             5       650       5       478      10      1128     1.358501000         0.3465
153.122.40.105       <-> 59.106.194.36              5       759       5       553      10      1312     0.848923000         0.2905
199.30.25.184        <-> 153.122.40.105             4       524       5       620       9      1144     2.142922000         0.5368
180.222.191.15       <-> 153.122.40.105             4       298       4       723       8      1021     0.848260000         0.5099
153.122.40.105       <-> 124.33.119.90              4       871       3      7086       7      7957     0.225297000         0.2115
153.122.40.105       <-> 119.72.196.172             1        66       1        66       2       132     3.537985000         1.7176
153.122.40.105       <-> 110.5.45.66                1        66       1        66       2       132     1.893945000         0.0044

HTTP Requestsベースの統計

# tshark -r packet -z http_req,tree

===================================================================
 HTTP/Requests                                                value             rate         percent
-------------------------------------------------------------------
 HTTP Requests by HTTP Host                                      5       0.001199
  oxynotes.com                                                    1       0.000240          20.00%
   /wp-content/themes/twentyten-child/images/uptop.png             1       0.000240         100.00%
  d.hatena.ne.jp                                                  1       0.000240          20.00%
   /puchiban/20130110/1357832786                                   1       0.000240         100.00%
  pnggauntlet.com                                                 1       0.000240          20.00%
   /                                                               1       0.000240         100.00%
  aqwiki.net                                                      2       0.000480          40.00%
   /rss/rss_list.txt                                               1       0.000240          50.00%
   /?plugin=rename&refer=NANOplus                                  1       0.000240          50.00%

===================================================================

ホストベースの統計

# tshark -r packet -z hosts
# Host data gathered from packet

59.106.194.36                           d.hatena.ne.jp
219.99.167.170                          ns0.future-s.com
219.99.160.181                          ns1.future-s.com
66.33.206.206                           ns1.dreamhost.com
208.97.182.10                           ns2.dreamhost.com
66.33.216.216                           ns3.dreamhost.com
69.163.209.122                          pnggauntlet.com
2607:f298:1:140::2a2:10e2               pnggauntlet.com

ステータスコードごとに表示

# tshark -z http,stat,
# tshark -z http,tree

IPとプロトコル、ポートごとに表示

# tshark -z dests,tree
# tshark -z plen,tree

「-z」オプション使える全フィルタ

  -z argument must be one of :
     afp,srt
     ancp,tree
     ansi_a,
     bacapp_instanceid,tree
     bacapp_ip,tree
     bacapp_objectid,tree
     bacapp_service,tree
     bootp,stat,
     camel,counter
     camel,srt
     collectd,tree
     compare,
     conv,
     dcerpc,srt,
     dests,tree
     diameter,avp
     expert
     follow,tcp
     follow,udp
     gsm_a,
     h225,counter
     h225,srt
     hart_ip,tree
     hosts
     http,stat,
     http,tree
     http_req,tree
     http_srv,tree
     icmp,srt
     icmpv6,srt
     io,phs
     io,stat,
     ip_hosts,tree
     isup_msg,tree
     mac-lte,stat
     megaco,rtd
     mgcp,rtd
     plen,tree
     proto,colinfo,
     ptype,tree
     radius,rtd
     rlc-lte,stat
     rpc,programs
     rpc,srt,
     rtp,streams
     rtsp,stat,
     rtsp,tree
     sametime,tree
     scsi,srt,
     sctp,stat
     sip,stat
     smb,sids
     smb,srt
     smpp_commands,tree
     sv
     ucp_messages,tree
     wsp,stat,

キャプチャの自動停止

特定の時間が経過したら記録を停止したい。特定のファイルサイズになったら記録を停止したい。といった指定もできます。

「-a」オプションで一定の値になったら記録を中止

停止するフラグ 記述方法
秒数で停止する duration:value
ファイルサイズで停止する filesize:value(デフォルトの単位はKB)
指定した保存ファイル数に達したら停止する files:value(ファイル名は、ファイル名_五けたの連番_作成時間(yyyyMMddHHmmss)となる)

開始から10秒で記録を停止する

# tshark -a duration:10

ファイルサイズが10キロバイトに達すると記録を停止する

# tshark -w packet -a filesize:10

ファイルサイズが10キロバイトに達すると次のファイルに記録。ファイル数が5つになったら停止する

# tshark -w packet -a filesize:10 -a files:5

以下の様なファイルが作成される

packet_00001_20140916171017
packet_00002_20140916171019
packet_00003_20140916171021
packet_00004_20140916171017
packet_00005_20140916171017

「-c」オプションを指定すると、パケット数を指定できる

# tshark -c 10

ファイルを切り替えるタイミングの指定

大量のパケットを一つのファイルに書き出すと読み込むだけでも重くなります。そのため一定のサイズが来たら別のファイルに切り替えます。

「-b」オプションを指定するとファイルのバッファサイズを指定できる

基本は「-a」と同じですが、ログローテーションのようにファイルを切り替えるタイミングを指定するだけで、停止はしないので注意。

切り替えるフラグ 記述方法
指定した秒数で新規ファイルに切り替える duration:value
指定したファイルサイズで新規ファイルに切り替える filesize:value(デフォルトの単位はKB)
指定した保存ファイル数に達したら古いファイルを消して上書きする files:value(ファイル名は、ファイル名_五けたの連番_作成時間(yyyyMMddHHmmss)となる)

 

ファイルサイズが10キロバイトに達したら別のファイルに切り替え。ファイル数が5つになったら1番古いファイルを削除して新しいファイルで上書きする

# tshark -w packet -b filesize:10 -b files:5

以上tsharkの基本的な使い方でした。

基本的には「-f」で取得したいデータをフィルタして、「-a」でファイルに取得する時間を指定。「-z」で統計を確認。
問題がありそうなパケットに関しては「-x」や「-V」で詳細を確認。といった流れで大抵の需要は満たせると思います。

更に高度な分析が必要な場合はWiresharkのディスプレイフィルタを利用しましょう。



現在のページを共有する



現在のページに関連する記事


おすすめの記事


コメントを残す

コメントは認証制のため、すぐには反映されません。

プログラミングに関する質問は「日本語でプログラミングの悩みを解決するQ&Aサイト sukegra」をご利用ください。