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.175 → 10.1.101.115 TCP 80 55327 → 80 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 WS=64 TSval=597833747 TSecr=0 SACK_PERM=1 2 0.000023 10.1.101.115 → 106.165.44.175 TCP 76 80 → 55327 [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.175 → 10.1.101.115 TCP 68 55327 → 80 [ACK] Seq=1 Ack=1 Win=131712 Len=0 TSval=597833762 TSecr=2055342097 4 0.015233 106.165.44.175 → 10.1.101.115 HTTP 144 GET / HTTP/1.1 5 0.015237 10.1.101.115 → 106.165.44.175 TCP 68 80 → 55327 [ACK] Seq=1 Ack=77 Win=62592 Len=0 TSval=2055342112 TSecr=597833762 6 0.015388 10.1.101.115 → 106.165.44.175 HTTP 927 HTTP/1.1 200 OK (text/html) 7 0.029359 106.165.44.175 → 10.1.101.115 TCP 68 55327 → 80 [ACK] Seq=77 Ack=860 Win=130880 Len=0 TSval=597833777 TSecr=2055342113 8 0.029629 106.165.44.175 → 10.1.101.115 TCP 68 55327 → 80 [FIN, ACK] Seq=77 Ack=860 Win=131072 Len=0 TSval=597833777 TSecr=2055342113 9 0.029649 10.1.101.115 → 106.165.44.175 TCP 68 80 → 55327 [FIN, ACK] Seq=860 Ack=78 Win=62592 Len=0 TSval=2055342127 TSecr=597833777 10 0.043834 106.165.44.175 → 10.1.101.115 TCP 68 55327 → 80 [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.24 → 35.75.22.116 TCP 78 56004 → 80 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 WS=64 TSval=598576611 TSecr=0 SACK_PERM=1 2 0.016389 35.75.22.116 → 192.168.0.24 TCP 74 80 → 56004 [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.24 → 35.75.22.116 TCP 66 56004 → 80 [ACK] Seq=1 Ack=1 Win=131712 Len=0 TSval=598576627 TSecr=2056091860 4 0.016518 192.168.0.24 → 35.75.22.116 HTTP 142 GET / HTTP/1.1 5 0.032305 35.75.22.116 → 192.168.0.24 TCP 66 80 → 56004 [ACK] Seq=1 Ack=77 Win=62592 Len=0 TSval=2056091876 TSecr=598576627 6 0.032305 35.75.22.116 → 192.168.0.24 TCP 66 [TCP Dup ACK 5#1] 80 → 56004 [ACK] Seq=1 Ack=77 Win=62592 Len=0 TSval=2056091876 TSecr=598576627 7 0.032466 35.75.22.116 → 192.168.0.24 HTTP 925 HTTP/1.1 200 OK (text/html) 8 0.032501 192.168.0.24 → 35.75.22.116 TCP 66 56004 → 80 [ACK] Seq=77 Ack=860 Win=130880 Len=0 TSval=598576642 TSecr=2056091876 9 0.032723 192.168.0.24 → 35.75.22.116 TCP 66 56004 → 80 [FIN, ACK] Seq=77 Ack=860 Win=131072 Len=0 TSval=598576642 TSecr=2056091876 10 0.048712 35.75.22.116 → 192.168.0.24 TCP 66 80 → 56004 [FIN, ACK] Seq=860 Ack=78 Win=62592 Len=0 TSval=2056091892 TSecr=598576642 11 0.048769 192.168.0.24 → 35.75.22.116 TCP 66 56004 → 80 [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.175 → 10.1.101.115 TCP 78 56799 → 80 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 WS=64 TSval=599940646 TSecr=0 SACK_PERM=1 2 0.000021621 10.1.101.115 → 106.165.44.175 TCP 74 80 → 56799 [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.175 → 10.1.101.115 HTTP 142 GET / HTTP/1.1 4 0.014262153 10.1.101.115 → 106.165.44.175 TCP 66 80 → 56799 [ACK] Seq=1 Ack=77 Win=62592 Len=0 TSval=2057468251 TSecr=599940660 5 0.014275806 106.165.44.175 → 10.1.101.115 TCP 66 56799 → 80 [ACK] Seq=1 Ack=1 Win=131712 Len=0 TSval=599940660 TSecr=2057468236 6 0.014278135 10.1.101.115 → 106.165.44.175 TCP 66 [TCP Dup ACK 4#1] 80 → 56799 [ACK] Seq=1 Ack=77 Win=62592 Len=0 TSval=2057468251 TSecr=599940660 7 0.014423231 10.1.101.115 → 106.165.44.175 HTTP 925 HTTP/1.1 200 OK (text/html) 8 0.028525676 106.165.44.175 → 10.1.101.115 TCP 66 56799 → 80 [ACK] Seq=77 Ack=860 Win=130880 Len=0 TSval=599940673 TSecr=2057468251 9 0.028532464 106.165.44.175 → 10.1.101.115 TCP 66 56799 → 80 [FIN, ACK] Seq=77 Ack=860 Win=131072 Len=0 TSval=599940673 TSecr=2057468251 10 0.028558085 10.1.101.115 → 106.165.44.175 TCP 66 80 → 56799 [FIN, ACK] Seq=860 Ack=78 Win=62592 Len=0 TSval=2057468265 TSecr=599940673 11 0.042741897 106.165.44.175 → 10.1.101.115 TCP 66 56799 → 80 [ACK] Seq=78 Ack=861 Win=131072 Len=0 TSval=599940687 TSecr=2057468265
いい感じですね。tcpdump と同じような内容が観測できました。CLI であるがゆえに簡単に環境に入れられ見たいものも見れたので満足です。 今後必要に応じて使っていこうと思います。それでは今回はこのへんで。