centos7
tshark

tsharkコマンドの使い方

1 環境

VMware Workstation 12 Player上のゲストマシンを使っています。

[root@admin ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

[root@admin ~]# uname -r
3.10.0-514.el7.x86_64

ゲストマシンの搭載CPU数は4個です。
[root@admin tcpdump]# cat /proc/cpuinfo |grep processor
processor       : 0
processor       : 1
processor       : 2
processor       : 3

2 事前準備

2.1 tsharkのインストール

wiresharkパッケージをインストールする。
[root@admin ~]# yum -y install wireshark
[root@admin ~]# tshark -v
TShark 1.10.14 (Git Rev Unknown from unknown)
-以下、略-

3 pcapファイルから条件を指定してパケットを絞り込む方法

3.0 事前準備(テスト用pcapファイル作成)

[root@admin tshark]# tcpdump -i eth0 not tcp port 22 -w test.cap

別ターミナルをオープンする。bcパッケージをダウンロードする。
ファイルサイズが小さいので、bcパッケージを選択しました。
[root@admin tshark]# yumdownloader bc

採取したpcapファイルを確認する。
[root@admin tshark]# ls -l test.cap
-rw-r--r-- 1 tcpdump tcpdump 133080  8月  1 20:04 test.cap

3.1 TCP関連

3.1.1 ポート番号(tcp.port)で絞り込む方法

[root@admin tshark]# tshark -r test.cap 'tcp.port==80' -n
Running as user "root" and group "root". This could be dangerous.
  1          0 192.168.0.100 -> 203.178.137.175 TCP 66 38308 > 80 [FIN, ACK] Seq=1 Ack=1 Win=296 Len=0 TSval=128449 TSecr=744519781
  2          2 192.168.0.100 -> 158.69.68.124 TCP 66 38680 > 80 [FIN, ACK] Seq=1 Ack=1 Win=432 Len=0 TSval=130496 TSecr=4182465524
  5          3 192.168.0.100 -> 103.237.168.15 TCP 74 35818 > 80 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=131487 TSecr=0 WS=128
-以下、略-

3.1.2 宛先ポート番号(tcp.dstport)で絞り込む方法

[root@admin tshark]# tshark -r test.cap 'tcp.dstport==80' -n
Running as user "root" and group "root". This could be dangerous.
  1          0 192.168.0.100 -> 203.178.137.175 TCP 66 38308 > 80 [FIN, ACK] Seq=1 Ack=1 Win=296 Len=0 TSval=128449 TSecr=744519781
  2          2 192.168.0.100 -> 158.69.68.124 TCP 66 38680 > 80 [FIN, ACK] Seq=1 Ack=1 Win=432 Len=0 TSval=130496 TSecr=4182465524
  5          3 192.168.0.100 -> 103.237.168.15 TCP 74 35818 > 80 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=131487 TSecr=0 WS=128
-以下、略-

3.1.3 送信元ポート番号(tcp.srcport)で絞り込む方法

[root@admin tshark]# tshark -r test.cap 'tcp.srcport==80' -n
Running as user "root" and group "root". This could be dangerous.
  6          3 103.237.168.15 -> 192.168.0.100 TCP 74 80 > 35818 [SYN, ACK] Seq=0 Ack=1 Win=14480 Len=0 MSS=1460 SACK_PERM=1 TSval=332825336 TSecr=131487 WS=128
  9          3 103.237.168.15 -> 192.168.0.100 TCP 66 80 > 35818 [FIN, ACK] Seq=1 Ack=2 Win=14592 Len=0 TSval=332825466 TSecr=131589
 18          9 203.178.137.175 -> 192.168.0.100 TCP 74 80 > 38330 [SYN, ACK] Seq=0 Ack=1 Win=64074 Len=0 SACK_PERM=1 TSval=744527437 TSecr=137677 MSS=1460 WS=4
-以下、略-

3.1.4 シーケンス番号(tcp.seq)で絞り込む方法

シーケンス番号が117466のものを抽出する。
[root@admin tshark]# tshark -r test.cap 'tcp.seq==117466' -n
Running as user "root" and group "root". This could be dangerous.
178          9 203.178.137.175 -> 192.168.0.100 TCP 66 80 > 38330 [ACK] Seq=117466 Ack=172 Win=256296 Len=0 TSval=744527472 TSecr=138032
179          9 203.178.137.175 -> 192.168.0.100 TCP 66 80 > 38330 [FIN, ACK] Seq=117466 Ack=172 Win=256296 Len=0 TSval=744527472 TSecr=138032
-以下、略-

3.1.5 SYNフラグだけがたったパケットを抽出する方法

[root@admin tshark]# tshark -r test.cap 'tcp.flags.syn==1' and 'tcp.flags.ack==0' -n
Running as user "root" and group "root". This could be dangerous.
  5          3 192.168.0.100 -> 103.237.168.15 TCP 74 35818 > 80 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=131487 TSecr=0 WS=128
 17          9 192.168.0.100 -> 203.178.137.175 TCP 74 38330 > 80 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=137677 TSecr=0 WS=128

3.1.6 SYNフラグ,SYN+ACKがたったパケットを抽出する方法

[root@admin tshark]# tshark -r test.cap 'tcp.flags.syn==1' -n
Running as user "root" and group "root". This could be dangerous.
  5          3 192.168.0.100 -> 103.237.168.15 TCP 74 35818 > 80 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=131487 TSecr=0 WS=128
  6          3 103.237.168.15 -> 192.168.0.100 TCP 74 80 > 35818 [SYN, ACK] Seq=0 Ack=1 Win=14480 Len=0 MSS=1460 SACK_PERM=1 TSval=332825336 TSecr=131487 WS=128
 17          9 192.168.0.100 -> 203.178.137.175 TCP 74 38330 > 80 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=137677 TSecr=0 WS=128
 18          9 203.178.137.175 -> 192.168.0.100 TCP 74 80 > 38330 [SYN, ACK] Seq=0 Ack=1 Win=64074 Len=0 SACK_PERM=1 TSval=744527437 TSecr=137677 MSS=1460 WS=4

3.1.7 FINフラグがたったパケットを抽出する方法

[root@admin tshark]# tshark -r test.cap 'tcp.flags.fin==1' -n
Running as user "root" and group "root". This could be dangerous.
  1          0 192.168.0.100 -> 203.178.137.175 TCP 66 38308 > 80 [FIN, ACK] Seq=1 Ack=1 Win=296 Len=0 TSval=128449 TSecr=744519781
  2          2 192.168.0.100 -> 158.69.68.124 TCP 66 38680 > 80 [FIN, ACK] Seq=1 Ack=1 Win=432 Len=0 TSval=130496 TSecr=4182465524
-以下、略-

3.1.8 RSTフラグがたったパケットを抽出する方法

[root@server tshark]# tshark -r zero.cap 'tcp.flags.reset==1' -n
Running as user "root" and group "root". This could be dangerous.
121         32 192.168.0.100 -> 192.168.0.110 TCP 66 11111 > 36618 [RST, ACK] Seq=1 Ack=796113 Win=224384 Len=0 TSval=0 TSecr=8540696

3.1.9 windowsサイズが0のパケットを抽出する方法

受信側でTCPパケットをこれ以上受信できなくなると(カーネルの受信バッファに空きがなくなると)、
送信側に対してwindowsサイズが0のTCPパケットを送信します。
送信側がwindowsサイズ0のパケットを受信すると、受信側に対する送信を停止します。
ここでは、windowsサイズが0のパケットを絞り込む方法を示します。

[root@server tshark]# tshark -r zero.cap 'tcp.window_size==0' -n
Running as user "root" and group "root". This could be dangerous.
227          0 192.168.0.100 -> 192.168.0.110 TCP 66 [TCP ZeroWindow] 11111 > 36448 [ACK] Seq=1 Ack=1223385 Win=0 Len=0 TSval=8935580 TSecr=7862435
229          0 192.168.0.100 -> 192.168.0.110 TCP 66 [TCP ZeroWindow] 11111 > 36448 [ACK] Seq=1 Ack=1223385 Win=0 Len=0 TSval=8935788 TSecr=7862435
236          1 192.168.0.100 -> 192.168.0.110 TCP 66 [TCP ZeroWindow] 11111 > 36448 [ACK] Seq=1 Ack=1248241 Win=0 Len=0 TSval=8936360 TSecr=7863212
-以下、略-

3.2 IP関連

3.2.1 送信元IPアドレス(ip.src)で絞り込む方法

[root@admin tshark]# tshark -r test.cap 'ip.src==192.168.0.100' -n
Running as user "root" and group "root". This could be dangerous.
  1          0 192.168.0.100 -> 203.178.137.175 TCP 66 38308 > 80 [FIN, ACK] Seq=1 Ack=1 Win=296 Len=0 TSval=128449 TSecr=744519781
  2          2 192.168.0.100 -> 158.69.68.124 TCP 66 38680 > 80 [FIN, ACK] Seq=1 Ack=1 Win=432 Len=0 TSval=130496 TSecr=4182465524
  3          3 192.168.0.100 -> 192.168.3.1  DNS 80 Standard query 0xe75a  A mirror.vastspace.net
-以下、略-

3.2.2 宛先IPアドレス(ip.dst)で絞り込む方法

[root@admin tshark]# tshark -r test.cap 'ip.dst==192.168.0.100' -n
Running as user "root" and group "root". This could be dangerous.
  4          3  192.168.3.1 -> 192.168.0.100 DNS 244 Standard query response 0xe75a  A 103.237.168.15
  6          3 103.237.168.15 -> 192.168.0.100 TCP 74 80 > 35818 [SYN, ACK] Seq=0 Ack=1 Win=14480 Len=0 MSS=1460 SACK_PERM=1 TSval=332825336 TSecr=131487 WS=128
  9          3 103.237.168.15 -> 192.168.0.100 TCP 66 80 > 35818 [FIN, ACK] Seq=1 Ack=2 Win=14592 Len=0 TSval=332825466 TSecr=131589
-以下、略-

3.2.3 IPパケット長(ip.len)で絞り込む方法

使える演算子は以下のとおり。
eq:等しい
ne:等しくない
gt:より大きい
ge:以上
lt:より小さい
le:以下

IPパケット長が1500(byte)のパケットを抽出する。
1514と表示されているのは、イーサネットヘッダ長(14バイト)をIPパケット長(1500)に加えているためです。
[root@admin tshark]# tshark -r test.cap 'ip.len eq 1500' -nn
Running as user "root" and group "root". This could be dangerous.
 22          9 203.178.137.175 -> 192.168.0.100 TCP ★1514 [TCP segment of a reassembled PDU]
 24          9 203.178.137.175 -> 192.168.0.100 TCP ★1514 [TCP segment of a reassembled PDU]
 26          9 203.178.137.175 -> 192.168.0.100 TCP ★1514 [TCP segment of a reassembled PDU]
-以下、略-

3.3 ARP関連

3.3.1 ARP要求(arp.opcode==1)パケットを抽出する方法

[root@admin tshark]# tshark -r test.cap 'arp.opcode==1' -n
Running as user "root" and group "root". This could be dangerous.
 11          8 b4:82:fe:d2:8c:1a -> ff:ff:ff:ff:ff:ff ARP 60 Who has 192.168.0.100?  Tell 192.168.0.5

3.3.2 ARP応答(arp.opcode==2)パケットを抽出する方法

[root@admin tshark]# tshark -r test.cap 'arp.opcode==2' -n
Running as user "root" and group "root". This could be dangerous.
 12          8 00:0c:29:9b:e6:7d -> b4:82:fe:d2:8c:1a ARP 42 192.168.0.100 is at 00:0c:29:9b:e6:7d

3.3.3 Target IP(arp.dst.proto_ipv4)をキーに抽出する方法

[root@admin tshark]# tshark -r test.cap 'arp.dst.proto_ipv4==192.168.0.100' -n
Running as user "root" and group "root". This could be dangerous.
 11          8 b4:82:fe:d2:8c:1a -> ff:ff:ff:ff:ff:ff ARP 60 Who has 192.168.0.100?  Tell 192.168.0.5

3.4 ICMP関連

3.4.1 ICMP Echo Request(type=8)を抽出する方法

テスト用pcapファイルを作成する。
[root@admin tshark]# tcpdump -i eth0 icmp -w ping.cap

もう1つターミナルを開いて、デフォルトGWにpingを実行する。
[root@admin tshark]# ping -c 1 192.168.0.1

 ICMP Echo Requestだけを抽出する。
[root@admin tshark]# tshark -r ping.cap 'icmp.type==8'
Running as user "root" and group "root". This could be dangerous.
  1          0 192.168.0.100 -> 192.168.0.1  ICMP 98 Echo (ping) request  id=0x0361, seq=1/256, ttl=64

3.4.2 ICMP Echo Reply(type=0)を抽出する方法

テスト用のpcapファイルは3.4.1のものを使う。ICMP Echo Replyだけを抽出する。
[root@admin tshark]# tshark -r ping.cap 'icmp.type==0'
Running as user "root" and group "root". This could be dangerous.
  2          0  192.168.0.1 -> 192.168.0.100 ICMP 98 Echo (ping) reply    id=0x0361, seq=1/256, ttl=255 (request in 1)

3.4.3 ICMP Host Unreachable(type=3,code1)を抽出する方法

ここで使うhping3コマンドの使い方はここを参照ください。

--------------------------------
1. テスト用pcapファイル作成環境
--------------------------------
s01でhping3を実行する。s01,adminはホスト名です。

    s01 --------------------- admin
   172.16.0.110       172.16.0.100

----------------------------
2. テスト用のpcapファイル作成
----------------------------
ICMP Host Unreachable(type=3,code1)パケットをadminに送信する。
[root@s01 ~]# hping3 -I eth2 -1 -c 1 -C 3 -K 1 --icmp-ipproto 17 --icmp-ipsrc 172.16.0.100 --icmp-ipdst 172.16.0.110 --icmp-srcport 20000 --icmp-dstport 11111 admin

ICMP Port Unreachable(type=3,code3)パケットをadminに送信する。
[root@s01 ~]# hping3 -I eth0 -1 -c 1 -C 3 -K 3 --icmp-ipproto 17 --icmp-ipsrc 192.168.0.100 --icmp-ipdst 192.169.0.110 --icmp-srcport 20000 --icmp-dstport 53 admin

----------------------------------------------------
3. ICMP Host Unreachable(type=3,code1)を抽出する方法
----------------------------------------------------
[root@admin tshark]# tshark -r dest_unreach.cap 'icmp.type==3' and 'icmp.code==1'
Running as user "root" and group "root". This could be dangerous.
  1          0    127.0.0.1 -> 192.168.0.100 ICMP 70 Destination unreachable (Host unreachable)

3.4.4 ICMP Port Unreachable(type=3,code3)を抽出する方法

テスト用pcapファイルは、3.4.3のものを使う。
[root@admin tshark]# tshark -r dest_unreach.cap 'icmp.type==3' and 'icmp.code==3'
Running as user "root" and group "root". This could be dangerous.
  2          4 192.168.0.110 -> 192.168.0.100 ICMP 70 Destination unreachable (Port unreachable)

3.5 その他

3.5.1 フレーム番号で絞り込む方法(frame.number)

[root@server tshark]# tshark -r test.cap -Y 'frame.number>=10 and frame.number<=20'
Running as user "root" and group "root". This could be dangerous.
 10          2  192.168.0.1 -> 192.168.0.20 ICMP 98 Echo (ping) reply    id=0x0580, seq=3/768, ttl=255 (request in 9)
 11          3 192.168.0.20 -> 192.168.0.1  ICMP 98 Echo (ping) request  id=0x0580, seq=4/1024, ttl=64
 12          3  192.168.0.1 -> 192.168.0.20 ICMP 98 Echo (ping) reply    id=0x0580, seq=4/1024, ttl=255 (request in 11)
 13          4 192.168.0.20 -> 172.104.105.31 NTP 90 NTP Version 4, client
 14          4 172.104.105.31 -> 192.168.0.20 NTP 90 NTP Version 4, server
 15          4 192.168.0.20 -> 192.168.0.1  ICMP 98 Echo (ping) request  id=0x0580, seq=5/1280, ttl=64
 16          4  192.168.0.1 -> 192.168.0.20 ICMP 98 Echo (ping) reply    id=0x0580, seq=5/1280, ttl=255 (request in 15)
 17          4  192.168.0.6 -> 224.0.0.251  MDNS 112 Standard query 0x0000  PTR _sleep-proxy._udp.local, "QU" question
 18          4 fe80::8b:dd37:8810:271c -> ff02::2      ICMPv6 70 Router Solicitation from f4:37:b7:57:0f:2f
 19          4 fe80::8b:dd37:8810:271c -> ff02::2      ICMPv6 70 Router Solicitation from f4:37:b7:57:0f:2f
 20          4 fe80::8b:dd37:8810:271c -> ff02::fb     MDNS 132 Standard query 0x0000  PTR _sleep-proxy._udp.local, "QU" question

3.5.2 時刻で絞り込む方法(frame.time >= “2015-01-01 00:00:00”)

4 時刻を表示する方法

4.1 パケット採取時刻を表示する方法(-ta)

テスト用のpcapファイルを採取の準備をする。
[root@server ~]# tcpdump -i eth0 port 53 -w dns.cap

digコマンドを実行して、DNSパケットを採取する。
[root@server ~]# dig ntp.nict.jp +short
[root@server ~]# dig google.co.jp +short


[root@server ~]# tshark -r dns.cap -ta
Running as user "root" and group "root". This could be dangerous.
  1   21:24:43 192.168.0.100 -> 192.168.3.1  DNS 82 Standard query 0x3eb3  A ntp.nict.jp
  2   21:24:43  192.168.3.1 -> 192.168.0.100 DNS 249 Standard query response 0x3eb3  A 133.243.238.164 A 133.243.238.244 A 133.243.238.163 A 133.243.238.243
  3   21:24:56 192.168.0.100 -> 192.168.3.1  DNS 83 Standard query 0xd9d8  A google.co.jp
  4   21:24:56  192.168.3.1 -> 192.168.0.100 DNS 245 Standard query response 0xd9d8  A 216.58.197.163

4.2 パケット採取時刻の差分を表示する方法(-td)

3番目のパケット採取時刻は、2番目のパケット採取時刻から12秒(★)経過していることがわかる。
[root@server ~]# tshark -r dns.cap -td
Running as user "root" and group "root". This could be dangerous.
  1          0 192.168.0.100 -> 192.168.3.1  DNS 82 Standard query 0x3eb3  A ntp.nict.jp
  2          0  192.168.3.1 -> 192.168.0.100 DNS 249 Standard query response 0x3eb3  A 133.243.238.164 A 133.243.238.244 A 133.243.238.163 A 133.243.238.243
  3       ★12 192.168.0.100 -> 192.168.3.1  DNS 83 Standard query 0xd9d8  A google.co.jp
  4          0  192.168.3.1 -> 192.168.0.100 DNS 245 Standard query response 0xd9d8  A 216.58.197.163

5 表示項目を指定する方法(-e)

5.1

[root@server tshark]# tshark -r test.cap -T fields -e frame.number -e frame.time -e ip.addr
Running as user "root" and group "root". This could be dangerous.
1       "Jan 28, 2018 10:02:34.938253000 JST"   192.168.0.20,150.95.187.128
2       "Jan 28, 2018 10:02:34.957023000 JST"   150.95.187.128,192.168.0.20
3       "Jan 28, 2018 10:02:35.016057000 JST"   192.168.0.20,192.168.0.1
4       "Jan 28, 2018 10:02:35.017424000 JST"   192.168.0.1,192.168.0.20
5       "Jan 28, 2018 10:02:35.567166000 JST"   192.168.0.20,160.16.75.242
-以下、略-

5.2

[root@server tshark]# tshark -r test.cap -T fields -e frame.number -e ip.src -Y ip.dst==104.71.167.95 -n
Running as user "root" and group "root". This could be dangerous.
121     192.168.0.20
123     192.168.0.20
124     192.168.0.20
127     192.168.0.20
128     192.168.0.20
130     192.168.0.20

7 統計情報の使い方(-z)

7.1 プロトコル毎のパケット数,バイト数を表示する方法(io,phs)

phs(Protocol Hierarchy Statistics)を表示する方法について説明します。
ここでは、-qオプションを付けて、出力する表示を簡略化しています。

7.1.1 全プロトコルの統計情報を表示する方法

[root@server tshark]# tshark -r test.cap -z io,phs -q
Running as user "root" and group "root". This could be dangerous.

===================================================================
Protocol Hierarchy Statistics
Filter:

eth                                      frames:273 bytes:40996
  ip                                     frames:190 bytes:33120
    udp                                  frames:140 bytes:28225
      http                               frames:88 bytes:21433
      dns                                frames:42 bytes:5388
      ntp                                frames:8 bytes:720
      bootp                              frames:2 bytes:684
    icmp                                 frames:38 bytes:3724
    igmp                                 frames:2 bytes:120
    tcp                                  frames:10 bytes:1051
      http                               frames:1 bytes:142
  arp                                    frames:34 bytes:1860
  ipv6                                   frames:49 bytes:6016
    icmpv6                               frames:25 bytes:2594
    udp                                  frames:24 bytes:3422
      dns                                frames:18 bytes:2534
      dhcpv6                             frames:6 bytes:888
===================================================================

7.1.2 特定プロトコルの統計情報を表示する方法

ここでは、httpのパケット数、バイト数を表示してみます。

[root@server tshark]# tshark -r test.cap -z io,phs,http -q
Running as user "root" and group "root". This could be dangerous.

===================================================================
Protocol Hierarchy Statistics
Filter: http

eth                                      frames:89 bytes:21575
  ip                                     frames:89 bytes:21575
    udp                                  frames:88 bytes:21433
      http                               frames:88 bytes:21433
    tcp                                  frames:1 bytes:142
      http                               frames:1 bytes:142
===================================================================

7.2 conversationの使い方(conv)

7.2.1 IPアドレスのconversation(conv,ip)

[root@server tshark]# tshark -r test.cap -z conv,ip -q
Running as user "root" and group "root". This could be dangerous.
================================================================================
IPv4 Conversations
Filter:<No Filter>
                                               |       <-      | |       ->      | |     Total     |    Relative    |   Duration   |
                                               | Frames  Bytes | | Frames  Bytes | | Frames  Bytes |      Start     |              |
239.255.255.250      <-> 192.168.0.4               45      7515       0         0      45      7515    82.329027000       105.1680
192.168.0.20         <-> 192.168.0.1               19      1862      19      1862      38      3724     8.062302000        23.6856
239.255.255.250      <-> 192.168.0.1               35     12190       0         0      35     12190     0.000000000       150.0386
224.0.0.251          <-> 192.168.0.4               20      2492       0         0      20      2492    80.080146000       104.9588
192.168.3.1          <-> 192.168.0.20              10       778      10      1894      20      2672    44.651194000        97.1332
192.168.0.20         <-> 93.184.216.34              4       571       6       480      10      1051    61.162292000         0.3928
239.255.255.250      <-> 192.168.0.2                8      1728       0         0       8      1728    52.762591000       123.0037
255.255.255.255      <-> 192.168.0.2                2       684       0         0       2       684   169.884249000         3.0029
192.168.0.10         <-> 108.61.181.39              1        90       1        90       2       180   159.329271000         0.0213
192.168.0.10         <-> 133.242.147.113            1        90       1        90       2       180   150.391712000         0.0713
192.168.0.20         <-> 157.7.208.12               1        90       1        90       2       180    37.181334000         0.0641
192.168.0.10         <-> 117.102.176.202            1        90       1        90       2       180    17.086654000         0.0208
224.0.0.22           <-> 192.168.0.5                2       120       0         0       2       120    16.383256000         2.0476
224.0.0.251          <-> 192.168.0.5                2       224       0         0       2       224    15.461278000         1.0240
================================================================================

7.2.2 TCPのconversation(conv,tcp)

[root@server tshark]# tshark -r test.cap -z conv,tcp -q
Running as user "root" and group "root". This could be dangerous.
================================================================================
TCP Conversations
Filter:<No Filter>
                                               |       <-      | |       ->      | |     Total     |    Relative    |   Duration   |
                                               | Frames  Bytes | | Frames  Bytes | | Frames  Bytes |      Start     |              |
192.168.0.10:41290   <-> 23.37.144.244:http         4       630       6       484      10      1114    46.780471000         0.0654
192.168.0.10:44222   <-> 93.184.216.34:http         4       571       6       480      10      1051    15.564340000         0.3932

7.2.3 TCPのconversation(conv,tcp) その2

複数のTCP conversationから、IPアドレスを指定して、特定のTCPコネクションだけを抽出します。

[root@server tshark]# tshark -r test.cap -z conv,tcp,ip.dst==23.37.144.244 -q
Running as user "root" and group "root". This could be dangerous.
================================================================================
TCP Conversations
Filter:ip.dst==23.37.144.244
                                               |       <-      | |       ->      | |     Total     |    Relative    |   Duration   |
                                               | Frames  Bytes | | Frames  Bytes | | Frames  Bytes |      Start     |              |
192.168.0.10:41290   <-> 23.37.144.244:http         0         0       6       484       6       484    46.780471000         0.0654
================================================================================

7.3 ICMPの統計情報を表示する方法

ICMP echo request/replyメッセージ数、ロスト数、往復の最少時間、最大時間等を表示する。

==========================================================================
[root@server tshark]# tshark -r test.cap -z icmp,srt -q
Running as user "root" and group "root". This could be dangerous.

==========================================================================
ICMP Service Response Time (SRT) Statistics (all times in ms):
Filter: <none>

Requests  Replies   Lost      % Loss
19        19        0           0.0%

Minimum   Maximum   Mean      Median    SDeviation     Min Frame Max Frame
1.423     8.059     3.214     2.428     1.853          28        51
==========================================================================

8 csvファイルに保存する方法

[root@server tshark]# tshark -r test.cap -T fields -E header=y -E separator=',' -e "frame.number" -e "frame.time_relative" -e "ip.src" -e "ip.dst" > Test1.csv
[root@server tshark]# ls Test1.csv
Test1.csv

9 リアルタイムにパケットを表示する方法

書式は以下のようになります。
#tshark -i <インタフェース> -Y <絞り込みの条件> -n
-i:インタフェースを指定する。
絞り込み条件:3で使ったものを使う。
-n:文字列ではなく数値で表示する。

9.1 指定できるインタフェースの表示方法(-D)

[root@server ~]# tshark -D
1. eth0
2. nflog
3. nfqueue
4. usbmon1
5. usbmon2
6. any
7. lo (Loopback)

9.2 宛先ポート番号で絞る方法(tcp.dstport)

宛先ポート番号が80番のパケットだけを表示する。
[root@server ~]# tshark -i eth0 -Y 'tcp.dstport==80' -n

もう1つターミナルを開く。CentOSのISOイメージをダウンロードする。
[root@server ~]# wget http://ftp.iij.ad.jp/pub/linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1611.iso

宛先ポート番号が80番のパケットだけが表示されていることがわかる。
[root@server ~]# tshark -i eth0 -Y 'tcp.dstport==80' -n
Running as user "root" and group "root". This could be dangerous.
Capturing on 'eth0'
 12 1.626019384 192.168.0.100 -> 202.232.140.70 TCP 74 54148 > 80 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=337602 TSecr=0 WS=128
 15 1.654961371 192.168.0.100 -> 202.232.140.70 TCP 66 54148 > 80 [ACK] Seq=1 Ack=1 Win=29312 Len=0 TSval=337631 TSecr=3147676588
 16 1.655369504 192.168.0.100 -> 202.232.140.70 HTTP 236 GET /pub/linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1611.iso HTTP/1.1
 21 1.688837506 192.168.0.100 -> 202.232.140.70 TCP 66 54148 > 80 [ACK] Seq=171 Ack=1449 Win=32128 Len=0 TSval=337665 TSecr=3147676619
-以下、略-

9.3 ICMPパケッを表示する方法(icmp.type==8)

ICMPパケットだけを表示する。
[root@server ~]# tshark -i eth0 -Y 'icmp.type==8' -n

もう1つターミナルを開く。デフォルトGWに対してpingを実行する。
[root@server ~]# ping 192.168.0.1

ICMPパケットだけが表示されていることがわかる。
[root@server ~]# tshark -i eth0 -Y 'icmp.type==8' -n
Running as user "root" and group "root". This could be dangerous.
Capturing on 'eth0'
130 11.814827925 192.168.0.100 -> 192.168.0.1  ICMP 98 Echo (ping) request  id=0x03af, seq=1/256, ttl=64
139 12.817488641 192.168.0.100 -> 192.168.0.1  ICMP 98 Echo (ping) request  id=0x03af, seq=2/512, ttl=64
146 13.821235485 192.168.0.100 -> 192.168.0.1  ICMP 98 Echo (ping) request  id=0x03af, seq=3/768, ttl=64
-以下、略-

9.4 DNSパケットを表示する方法(udp.port==53)

[root@server ~]# tshark -i eth0 -Y 'udp.port==53' -n

もう1つターミナルをオープンする。NTPサーバのIPアドレスを調べる。
[root@server ~]# dig ntp.nict.jp +short
133.243.238.164
133.243.238.163
133.243.238.244
133.243.238.243

DNSサーバへの問い合わせ、応答のパケットが採取できたことがわかる。
[root@server ~]# tshark -i eth0 -Y 'udp.port==53' -n
-中略-
 23 26.712238181 192.168.0.100 -> 192.168.3.1  DNS 82 Standard query 0xf9d2  A ntp.nict.jp
 24 26.722533269  192.168.3.1 -> 192.168.0.100 DNS 249 Standard query response 0xf9d2  A 133.243.238.164 A 133.243.238.163 A 133.243.238.244 A 133.243.238.243

10 NetLinkを流れるパケットを表示する方法

NetLinkは、カーネルとユーザー空間のプロセス間で情報をやりとりするために用いられるインタフェースです。

ターミナル1(nlmonモジュールのインストール,デバイスの作成)
nlmonモジュールをインストールする。
[root@server ~]# lsmod |grep nlmon
[root@server ~]# modprobe nlmon
[root@server ~]# lsmod |grep nlmon
nlmon                  12924  0

nlmonデバイスを作成する。
[root@server ~]# ip link add nlmon0 type nlmon
[root@server ~]# ip link set nlmon0 up
[root@server ~]# ip link show dev nlmon0
5: nlmon0: <NOARP,UP,LOWER_UP> mtu 3776 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/netlink
ターミナル1(nlmon0デバイスでパケットのキャプチャ)
[root@server ~]# tshark -i nlmon0
Running as user "root" and group "root". This could be dangerous.
Capturing on 'nlmon0'

ipコマンドを実行する。

ターミナル2(Netlinkを使うコマンドの実行)
[root@server ~]# ip link show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:a8:bf:66 brd ff:ff:ff:ff:ff:ff

ipコマンドを実行すると、NetLinkを流れるパケットが確認できます。

ターミナル1(nlmon0デバイスでパケットのキャプチャ)
[root@server ~]# tshark -i nlmon0
Running as user "root" and group "root". This could be dangerous.
Capturing on 'nlmon0'
  1 0.000000000              ->              UNKNOWN 68 WTAP_ENCAP = 0
  2 0.000441676              ->              UNKNOWN 1216 WTAP_ENCAP = 0

-Vオプションを指定して、NetLinkメッセージの詳細を表示してみます。

詳細表示
[root@server ~]# tshark -i nlmon0 -V
Running as user "root" and group "root". This could be dangerous.
Capturing on 'nlmon0'
Frame 1: 68 bytes on wire (544 bits), 68 bytes captured (544 bits) on interface 0
    Interface id: 0
    Encapsulation type: Unknown (0)
    Arrival Time: Jun 16, 2018 18:56:40.531477557 JST
    [Time shift for this packet: 0.000000000 seconds]
    Epoch Time: 1529143000.531477557 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: 68 bytes (544 bits)
    Capture Length: 68 bytes (544 bits)
    [Frame is marked: False]
    [Frame is ignored: False]
    [Protocols in frame: data]
Data (68 bytes)

0000  00 04 03 38 00 00 00 00 00 00 00 00 00 00 00 00   ...8............
0010  34 00 00 00 02 00 00 00 00 00 00 00 de 09 00 00   4...............
0020  ed ff ff ff 20 00 00 00 10 00 05 00 00 00 00 00   .... ...........
0030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0040  00 00 00 00                                       ....
    Data: 000403380000000000000000000000003400000002000000...
    [Length: 68]
(以下、略)
後始末(nlmonデバイスの削除、モジュールのアンインストール)
[root@server ~]# ip link del nlmon0
[root@server ~]# rmmod nlmon
[root@server ~]# lsmod |grep nlmon
[root@server ~]#

X 参考情報

Display Filter Reference
Wiresharkのフィルター
tcpdumpの使い方
Wireshark & Ethereal Network Protocol Analyzer Toolkit
tsharkを用いたネットワークトラフィックの内訳の調査
Tsharkメモ
tsharkでデータをcsvに出力する際にタイトル行を追加する方法

Network forensics with tshark
Networking/Computing Tips/Tricks

Instant Traffic Analysis with Tshark How-to
pcapファイルから特定のHTTPRequestとそのResponseを抜き出す