tshark の基本的な使い方
今回は tshark の基本的な使い方をメモしておきます。
キャプチャフィルタとディスプレイフィルタ
パケットキャプチャを実行する際は勿論、「全パケットをキャプチャし、表示する」ことも可能です。 ですが、必要に応じてフィルタをかけることも可能です。 フィルタにはふたつの種類があります。
フィルタの種類 |
説明 |
キャプチャフィルタ |
キャプチャするパケットそのものを減らすフィルタ。 Berkeley Packet Filter (BPF) 構文で指定する |
ディスプレイフィルタ |
表示量を減らすフィルタ。 キャプチャするパケットには影響しない。 BPF 構文よりも詳細な指定が可能 |
各々、以下に詳細が書かれています。 「ある程度の期間、必要なパケットだけをキャプチャしたい。 キャプチャファイルの肥大化は避けたい」という場合等はキャプチャフィルタの利用を検討します。 「一時的なトラブルシューティングで利用したい」という場合はディスプレイフィルタの利用を検討します。
root ユーザで実行すると警告が表示される
tshark は root ユーザで実行すると毎回、下記のように「root ユーザ、または root グループでの実行は危険」という旨の警告が表示されます。 実行自体は可能ですが、警告を表示したくない場合は wireshark
グループに所属した標準ユーザで実行します。
| # 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
インターフェイスを指定する場合の実行例は以下の通りです。
キャプチャするパケット数を指定する
指定したパケット数をキャプチャしたら自動停止させる場合は -c [COUNT]
を指定します (ロングオプションは存在しません)。 ens160
インターフェイスで 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 リクエストの詳細を表示するには以下のように実行します。
| 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]
オプションを指定します (ロングオプションは存在しません)。 このオプションはディスプレイフィルタとは併用出来ません。 キャプチャするパケットを限定するには (ディスプレイフィルタでは無く) キャプチャフィルタを指定します。
| tshark -i ens160 -w capture.pcapng
|
尚、デフォルトでファイル形式は PcapNg 形式で保存されます。 以下は file
コマンドでキャプチャファイルを確認した際の実行例です。 確かに PcapNg ファイルとして認識されていました。
| # file capture.pcapng
capture.pcapng: pcapng capture file - version 1.0
|
仮に -w capture.pcap
のように拡張子を .pcapng
以外を指定しても PcapNg 形式で保存されているようでした。