Skip to content

tshark の基本的な使い方

今回は tshark の基本的な使い方をメモしておきます。

キャプチャフィルタとディスプレイフィルタ

パケットキャプチャを実行する際は勿論、「全パケットをキャプチャし、表示する」ことも可能です。 ですが、必要に応じてフィルタをかけることも可能です。 フィルタにはふたつの種類があります。

フィルタの種類 説明
キャプチャフィルタ キャプチャするパケットそのものを減らすフィルタ。 Berkeley Packet Filter (BPF) 構文で指定する
ディスプレイフィルタ 表示量を減らすフィルタ。 キャプチャするパケットには影響しない。 BPF 構文よりも詳細な指定が可能

各々、以下に詳細が書かれています。 「ある程度の期間、必要なパケットだけをキャプチャしたい。 キャプチャファイルの肥大化は避けたい」という場合等はキャプチャフィルタの利用を検討します。 「一時的なトラブルシューティングで利用したい」という場合はディスプレイフィルタの利用を検討します。

root ユーザで実行すると警告が表示される

tshark は root ユーザで実行すると毎回、下記のように「root ユーザ、または root グループでの実行は危険」という旨の警告が表示されます。 実行自体は可能ですが、警告を表示したくない場合は wireshark グループに所属した標準ユーザで実行します。

1
2
3
# tshark --version
Running as user "root" and group "root". This could be dangerous.
TShark (Wireshark) 3.6.2 (Git v3.6.2 packaged as 3.6.2-2)

利用出来るインターフェイスを表示する

利用出来るインターフェイスを表示するには -D (または --list-interfaces) オプションを指定します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# tshark -D
Running as user "root" and group "root". This could be dangerous.
1. ens160
2. any
3. lo (Loopback)
4. docker0
5. bluetooth-monitor
6. nflog
7. nfqueue
8. dbus-system
9. dbus-session
10. ciscodump (Cisco remote capture)
11. dpauxmon (DisplayPort AUX channel monitor capture)
12. randpkt (Random packet generator)
13. sdjournal (systemd Journal Export)
14. sshdump (SSH remote capture)
15. udpdump (UDP Listener remote capture)

インターフェイスを指定してパケットをキャプチャする

インターフェイスを指定してパケットをキャプチャするには -i (または --interface) オプションを指定します。 ens160 インターフェイスを指定する場合の実行例は以下の通りです。

1
tshark -i ens160

キャプチャするパケット数を指定する

指定したパケット数をキャプチャしたら自動停止させる場合は -c [COUNT] を指定します (ロングオプションは存在しません)。 ens160 インターフェイスで 10 パケット受信した後、自動終了させる場合の実行例は以下の通りです。

1
tshark -i ens160 -c 10

指定した条件に一致するパケットだけ表示する

指定した条件に一致するパケットだけを表示させるには上述のディスプレイフィルタを利用します。 ディスプレイフィルタを利用するには -Y オプションを指定します (ロングオプションは存在しません)。 フィルタの指定例は以下の通りです。

コマンド 説明
tshark -i ens160 -Y "tcp.port==80" TCP ポートが 80 のパケットのみ、表示する (3way handshake も表示する)
tshark -i ens160 -Y "http" HTTP パケットのみ、表示する (3way handshake 等は表示しない)
tshark -i ens160 -Y "udp.port==53" UDP ポートが 80 のパケットのみ、表示する
tshark -i ens160 -Y "dns" DNS パケットのみ、表示する (基本的に udp.port==53 と同じ動作)
tshark -i ens160 -Y "http.request" HTTP リクエストのみ、表示する
tshark -i ens160 -Y "http.response" HTTP レスポンスのみ、表示する
tshark -i ens160 -Y "icmp" ICMP パケットのみ、表示する
tshark -i ens160 -Y "icmp.type==8" ICMP Echo Request のみ、表示する
tshark -i ens160 -Y "icmp.type==0" ICMP Echo Reply のみ、表示する

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

パケットの詳細を表示するには -V を指定します (ロングオプションは存在しません)。 HTTP リクエストの詳細を表示するには以下のように実行します。

1
tshark -i ens160 -Y "http.request" -V

実際の実行例は以下の通りです。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# tshark -i ens160 -Y "http.request" -V
Running as user "root" and group "root". This could be dangerous.
Capturing on 'ens160'
 ** (tshark:484084) 11:04:01.154406 [Main MESSAGE] -- Capture started.
 ** (tshark:484084) 11:04:01.154592 [Main MESSAGE] -- File: "/tmp/wireshark_ens160DHD211.pcapng"
Frame 95: 142 bytes on wire (1136 bits), 142 bytes captured (1136 bits) on interface ens160, id 0
    Interface id: 0 (ens160)
        Interface name: ens160
    Encapsulation type: Ethernet (1)
    Arrival Time: Mar 18, 2023 11:04:04.453998438 JST
    [Time shift for this packet: 0.000000000 seconds]
    Epoch Time: 1679105044.453998438 seconds
    [Time delta from previous captured frame: 0.000044401 seconds]
    [Time delta from previous displayed frame: 0.000000000 seconds]
    [Time since reference or first frame: 3.299305311 seconds]
    Frame Number: 95
    Frame Length: 142 bytes (1136 bits)
    Capture Length: 142 bytes (1136 bits)
    [Frame is marked: False]
    [Frame is ignored: False]
    [Protocols in frame: eth:ethertype:ip:tcp:http]
Ethernet II, Src: VMware_b6:e4:3a (00:50:56:b6:e4:3a), Dst: VMware_b6:8e:63 (00:50:56:b6:8e:63)
    Destination: VMware_b6:8e:63 (00:50:56:b6:8e:63)
        Address: VMware_b6:8e:63 (00:50:56:b6:8e:63)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
    Source: VMware_b6:e4:3a (00:50:56:b6:e4:3a)
        Address: VMware_b6:e4:3a (00:50:56:b6:e4:3a)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
    Type: IPv4 (0x0800)
Internet Protocol Version 4, Src: 10.0.0.111, Dst: 10.0.0.222
    0100 .... = Version: 4
    .... 0101 = Header Length: 20 bytes (5)
    Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
        0000 00.. = Differentiated Services Codepoint: Default (0)
        .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)
    Total Length: 128
    Identification: 0x881b (34843)
    Flags: 0x40, Don't fragment
        0... .... = Reserved bit: Not set
        .1.. .... = Don't fragment: Set
        ..0. .... = More fragments: Not set
    ...0 0000 0000 0000 = Fragment Offset: 0
    Time to Live: 64
    Protocol: TCP (6)
    Header Checksum: 0x58a5 [validation disabled]
    [Header checksum status: Unverified]
    Source Address: 172.29.0.190
    Destination Address: 10.0.0.222
Transmission Control Protocol, Src Port: 44786, Dst Port: 80, Seq: 1, Ack: 1, Len: 76
    Source Port: 44786
    Destination Port: 80
    [Stream index: 7]
    [Conversation completeness: Incomplete, ESTABLISHED (7)]
    [TCP Segment Len: 76]
    Sequence Number: 1    (relative sequence number)
    Sequence Number (raw): 1485097056
    [Next Sequence Number: 77    (relative sequence number)]
    Acknowledgment Number: 1    (relative ack number)
    Acknowledgment number (raw): 891994858
    1000 .... = Header Length: 32 bytes (8)
    Flags: 0x018 (PSH, ACK)
        000. .... .... = Reserved: Not set
        ...0 .... .... = Nonce: Not set
        .... 0... .... = Congestion Window Reduced (CWR): Not set
        .... .0.. .... = ECN-Echo: Not set
        .... ..0. .... = Urgent: Not set
        .... ...1 .... = Acknowledgment: Set
        .... .... 1... = Push: Set
        .... .... .0.. = Reset: Not set
        .... .... ..0. = Syn: Not set
        .... .... ...0 = Fin: Not set
        [TCP Flags: ·······AP···]
    Window: 502
    [Calculated window size: 64256]
    [Window size scaling factor: 128]
    Checksum: 0x5cb0 [unverified]
    [Checksum Status: Unverified]
    Urgent Pointer: 0
    Options: (12 bytes), No-Operation (NOP), No-Operation (NOP), Timestamps
        TCP Option - No-Operation (NOP)
            Kind: No-Operation (1)
        TCP Option - No-Operation (NOP)
            Kind: No-Operation (1)
        TCP Option - Timestamps: TSval 3053680567, TSecr 2406480744
            Kind: Time Stamp Option (8)
            Length: 10
            Timestamp value: 3053680567
            Timestamp echo reply: 2406480744
    [Timestamps]
        [Time since first frame in this TCP stream: 0.000317482 seconds]
        [Time since previous frame in this TCP stream: 0.000044401 seconds]
    [SEQ/ACK analysis]
        [iRTT: 0.000273081 seconds]
        [Bytes in flight: 76]
        [Bytes sent since last PSH flag: 76]
    TCP payload (76 bytes)
Hypertext Transfer Protocol
    GET / HTTP/1.1\r\n
        [Expert Info (Chat/Sequence): GET / HTTP/1.1\r\n]
            [GET / HTTP/1.1\r\n]
            [Severity level: Chat]
            [Group: Sequence]
        Request Method: GET
        Request URI: /
        Request Version: HTTP/1.1
    Host: 10.0.0.222\r\n
    User-Agent: curl/7.81.0\r\n
    Accept: */*\r\n
    \r\n
    [Full request URI: http://10.0.0.222/]
    [HTTP request 1/1]

保存可能なファイル形式を確認する

保存可能なファイル形式を確認するには -F オプションを指定します (ロングオプションは存在しません)。 以下は実行例です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# tshark -F
Running as user "root" and group "root". This could be dangerous.
tshark: option requires an argument: F
tshark: The available capture file types for the "-F" flag are:
    pcap - Wireshark/tcpdump/... - pcap
    pcapng - Wireshark/... - pcapng
    5views - InfoVista 5View capture
    btsnoop - Symbian OS btsnoop
    commview-ncf - TamoSoft CommView NCF
    commview-ncfx - TamoSoft CommView NCFX
    dct2000 - Catapult DCT2000 trace (.out format)
    erf - Endace ERF capture
    eyesdn - EyeSDN USB S0/E1 ISDN trace format
    k12text - K12 text file
    lanalyzer - Novell LANalyzer
    logcat - Android Logcat Binary format
    logcat-brief - Android Logcat Brief text format
    logcat-long - Android Logcat Long text format
    logcat-process - Android Logcat Process text format
    logcat-tag - Android Logcat Tag text format
    logcat-thread - Android Logcat Thread text format
    logcat-threadtime - Android Logcat Threadtime text format
    logcat-time - Android Logcat Time text format
    modpcap - Modified tcpdump - pcap
    netmon1 - Microsoft NetMon 1.x
    netmon2 - Microsoft NetMon 2.x
    nettl - HP-UX nettl trace
    ngsniffer - Sniffer (DOS)
    ngwsniffer_1_1 - NetXray, Sniffer (Windows) 1.1
    ngwsniffer_2_0 - Sniffer (Windows) 2.00x
    nokiapcap - Nokia tcpdump - pcap
    nsecpcap - Wireshark/tcpdump/... - nanosecond pcap
    nstrace10 - NetScaler Trace (Version 1.0)
    nstrace20 - NetScaler Trace (Version 2.0)
    nstrace30 - NetScaler Trace (Version 3.0)
    nstrace35 - NetScaler Trace (Version 3.5)
    observer - Viavi Observer
    rf5 - Tektronix K12xx 32-bit .rf5 format
    rh6_1pcap - RedHat 6.1 tcpdump - pcap
    snoop - Sun snoop
    suse6_3pcap - SuSE 6.3 tcpdump - pcap
    visual - Visual Networks traffic capture

キャプチャ結果をファイルに保存する

キャプチャした結果をファイルに保存する場合は -w [FILE] オプションを指定します (ロングオプションは存在しません)。 このオプションはディスプレイフィルタとは併用出来ません。 キャプチャするパケットを限定するには (ディスプレイフィルタでは無く) キャプチャフィルタを指定します。

1
tshark -i ens160 -w capture.pcapng

尚、デフォルトでファイル形式は PcapNg 形式で保存されます。 以下は file コマンドでキャプチャファイルを確認した際の実行例です。 確かに PcapNg ファイルとして認識されていました。

1
2
# file capture.pcapng
capture.pcapng: pcapng capture file - version 1.0

仮に -w capture.pcap のように拡張子を .pcapng 以外を指定しても PcapNg 形式で保存されているようでした。