Wireshark の CLI 版 TShark を試してみる。

こんにちは k-jun です。今回は、Wireshark より簡易的に使用できて高速な TShark を試してみようと思います。

https://github.com/wireshark/wireshark

The Wireshark distribution also comes with TShark

記載の通り、Wireshark にくっついて来るみたいですね。今回は tpcdump でキャプチャしたパケットを閲覧してみたいと思います。

Install

$ brew install wireshark
$ which tshark
/usr/local/bin/tshark

Run

まずは tcpdump でパケットをキャプチャします。-w でファイル名を指定することで対象ファイルへのパケットがキャプチャされます。 今回は適当に EC2 インスタンスAWS 環境に立ち上げ、Nginx を起動させておきます。EC2インスタンス に対してローカルから cURL を発行し、インスタンス上で tcpdump を打っておきパケットを確認してみます。

$ sudo apt update -y
$ sudo apt install -y nginx
$ sudo tcpdump -w /tmp/tcpdump -i any port 80

rsync で手元に持ってきてから tshark で中身を見てみます。port は 80 に限定します。

$ rsync -azv ubuntu@XX.XXX.XX.XXX:/tmp/tcpdump /tmp/tcpdump
$ tshark -r /tmp/tcpdump 'tcp.dstport==80'
    1   0.000000 106.165.44.17510.1.101.115 TCP 80 5532780 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 WS=64 TSval=597833747 TSecr=0 SACK_PERM=1
    2   0.000023 10.1.101.115106.165.44.175 TCP 76 8055327 [SYN, ACK] Seq=0 Ack=1 Win=62643 Len=0 MSS=8961 SACK_PERM=1 TSval=2055342097 TSecr=597833747 WS=128
    3   0.015210 106.165.44.17510.1.101.115 TCP 68 5532780 [ACK] Seq=1 Ack=1 Win=131712 Len=0 TSval=597833762 TSecr=2055342097
    4   0.015233 106.165.44.17510.1.101.115 HTTP 144 GET / HTTP/1.1
    5   0.015237 10.1.101.115106.165.44.175 TCP 68 8055327 [ACK] Seq=1 Ack=77 Win=62592 Len=0 TSval=2055342112 TSecr=597833762
    6   0.015388 10.1.101.115106.165.44.175 HTTP 927 HTTP/1.1 200 OK  (text/html)
    7   0.029359 106.165.44.17510.1.101.115 TCP 68 5532780 [ACK] Seq=77 Ack=860 Win=130880 Len=0 TSval=597833777 TSecr=2055342113
    8   0.029629 106.165.44.17510.1.101.115 TCP 68 5532780 [FIN, ACK] Seq=77 Ack=860 Win=131072 Len=0 TSval=597833777 TSecr=2055342113
    9   0.029649 10.1.101.115106.165.44.175 TCP 68 8055327 [FIN, ACK] Seq=860 Ack=78 Win=62592 Len=0 TSval=2055342127 TSecr=597833777
   10   0.043834 106.165.44.17510.1.101.115 TCP 68 5532780 [ACK] Seq=78 Ack=861 Win=131072 Len=0 TSval=597833791 TSecr=2055342127

tshark で中身は見れましたが、これ EC2 インスタンスの Private の IP Address ですね..。106.165.44.175 は自分の IP っぽいですが...。 どうも不思議ですね..。手元でも tcpdump を取ってみます。

$ tshark -r /tmp/tcpdump_send 'tcp.port==80'
    1   0.000000 192.168.0.2435.75.22.116 TCP 78 5600480 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 WS=64 TSval=598576611 TSecr=0 SACK_PERM=1
    2   0.016389 35.75.22.116192.168.0.24 TCP 74 8056004 [SYN, ACK] Seq=0 Ack=1 Win=62643 Len=0 MSS=1460 SACK_PERM=1 TSval=2056091860 TSecr=598576611 WS=128
    3   0.016430 192.168.0.2435.75.22.116 TCP 66 5600480 [ACK] Seq=1 Ack=1 Win=131712 Len=0 TSval=598576627 TSecr=2056091860
    4   0.016518 192.168.0.2435.75.22.116 HTTP 142 GET / HTTP/1.1
    5   0.032305 35.75.22.116192.168.0.24 TCP 66 8056004 [ACK] Seq=1 Ack=77 Win=62592 Len=0 TSval=2056091876 TSecr=598576627
    6   0.032305 35.75.22.116192.168.0.24 TCP 66 [TCP Dup ACK 5#1] 8056004 [ACK] Seq=1 Ack=77 Win=62592 Len=0 TSval=2056091876 TSecr=598576627
    7   0.032466 35.75.22.116192.168.0.24 HTTP 925 HTTP/1.1 200 OK  (text/html)
    8   0.032501 192.168.0.2435.75.22.116 TCP 66 5600480 [ACK] Seq=77 Ack=860 Win=130880 Len=0 TSval=598576642 TSecr=2056091876
    9   0.032723 192.168.0.2435.75.22.116 TCP 66 5600480 [FIN, ACK] Seq=77 Ack=860 Win=131072 Len=0 TSval=598576642 TSecr=2056091876
   10   0.048712 35.75.22.116192.168.0.24 TCP 66 8056004 [FIN, ACK] Seq=860 Ack=78 Win=62592 Len=0 TSval=2056091892 TSecr=598576642
   11   0.048769 192.168.0.2435.75.22.116 TCP 66 5600480 [ACK] Seq=78 Ack=861 Win=131072 Len=0 TSval=598576658 TSecr=2056091892

手元からは 35.75.22.116 に http request を送信しているように見えています。こちらの Source IP も Private IP になっていますしそういうものということですかね。

内容的には しっかり SYN -> SYN,ACK -> ACK の 3way ハンドシェイクや切断時の FIN,ACK -> FIN,ACK -> ACK も確認できます。

また TShark は実は直接 パケットキャプチャを行うことができます。tcpdump で取得だけを行ったのは TShark をインストールできないリモートサーバーを想定していたためでした。 できることを試さないのも怠慢なのでやってみます。

$ sudo apt install -y tshark
$ sudo tshark -Y 'tcp.port==80'
Running as user "root" and group "root". This could be dangerous.
Capturing on 'ens5'
    1 0.000000000 106.165.44.17510.1.101.115 TCP 78 5679980 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 WS=64 TSval=599940646 TSecr=0 SACK_PERM=1
    2 0.000021621 10.1.101.115106.165.44.175 TCP 74 8056799 [SYN, ACK] Seq=0 Ack=1 Win=62643 Len=0 MSS=8961 SACK_PERM=1 TSval=2057468236 TSecr=599940646 WS=128
    3 0.014247052 106.165.44.17510.1.101.115 HTTP 142 GET / HTTP/1.1
    4 0.014262153 10.1.101.115106.165.44.175 TCP 66 8056799 [ACK] Seq=1 Ack=77 Win=62592 Len=0 TSval=2057468251 TSecr=599940660
    5 0.014275806 106.165.44.17510.1.101.115 TCP 66 5679980 [ACK] Seq=1 Ack=1 Win=131712 Len=0 TSval=599940660 TSecr=2057468236
    6 0.014278135 10.1.101.115106.165.44.175 TCP 66 [TCP Dup ACK 4#1] 8056799 [ACK] Seq=1 Ack=77 Win=62592 Len=0 TSval=2057468251 TSecr=599940660
    7 0.014423231 10.1.101.115106.165.44.175 HTTP 925 HTTP/1.1 200 OK  (text/html)
    8 0.028525676 106.165.44.17510.1.101.115 TCP 66 5679980 [ACK] Seq=77 Ack=860 Win=130880 Len=0 TSval=599940673 TSecr=2057468251
    9 0.028532464 106.165.44.17510.1.101.115 TCP 66 5679980 [FIN, ACK] Seq=77 Ack=860 Win=131072 Len=0 TSval=599940673 TSecr=2057468251
   10 0.028558085 10.1.101.115106.165.44.175 TCP 66 8056799 [FIN, ACK] Seq=860 Ack=78 Win=62592 Len=0 TSval=2057468265 TSecr=599940673
   11 0.042741897 106.165.44.17510.1.101.115 TCP 66 5679980 [ACK] Seq=78 Ack=861 Win=131072 Len=0 TSval=599940687 TSecr=2057468265

いい感じですね。tcpdump と同じような内容が観測できました。CLI であるがゆえに簡単に環境に入れられ見たいものも見れたので満足です。 今後必要に応じて使っていこうと思います。それでは今回はこのへんで。