tcpdump で次のようにキャプって保存したファイルは wireshark で開いて解析できます。
tcpdump -nn -w a.cap port 80
wireshark なら tcpdump よりもいろいろな解析が可能なので、よくサーバでキャプったファイルから HTTP などの TCP ストリームを取り出すのに使っていました。
がしかし、「サーバ上で tcpdump でファイルに保存 → ローカルの落としてきて wireshark で開く」というのが面倒くさくて、CLI だけでできればなーと常々思っていました。
・・・すみません、常々思っていたにも関わらずまったく調べていませんでした。ググれば普通に CLI で出来るツールがでてきました。
tshark
wireshark の CLI 版です。
CentOS 7 とか 8 とか Fedora 31 とかなら標準のリポジトリから入れられます。
# CentOS 7 sudo yum -y install wireshark # CentOS 8 / Fedora 31 sudo dnf -y install wireshark-cli
CentOS 8 や Fedora 31 で wireshark
を入れると X 関係が含まれるのか大量の依存パッケージがインストールされてしまいます。tshark だけなら wireshark-cli
で十分です。
次のように tcpdump でキャプチャしたファイルが読めます。-z
オプションの末尾の 1 はストリーム番号です。キャプチャファイルに複数のストリームがあるときは番号を変えて別々に実行する必要があります。
tshark -n -q -z follow,tcp,ascii,1 -r a.cap
次のように直接キャプチャすると、キャプっているパケットの概要が逐次表示されつつ、Ctrl+C で止めたときに TCP ストリームが表示されます。
tshark -n -z follow,tcp,ascii,1 port 80
tcpdump からパイプするときは Ctrl+C で tshark が SIGINT で死ぬとなにも表示されません。setsid で SIGINT されないようにすれば大丈夫です。
tcpdump -nn port 80 -w - | setsid tshark -n -z follow,tcp,ascii,1 -r -
tcpflow
tcpdump とは異なり TCP ストリームを再構築して解析できるパケットキャプチャツールです。
CentOS 7 なら epel から入れられます。
sudo yum -y install epel-release sudo yum -y install tcpflow
CentOS 8 だと CERT Forensics Tools から入れられます。
sudo yum -y install https://forensics.cert.org/cert-forensics-tools-release-el8.rpm sudo yum -y install tcpflow
Fedora 31 なら標準のリポジトリから入れられます。
sudo yum -y install tcpflow
tcpdump でキャプチャしたファイルを読むと、保存されたすべての TCP ストリームが表示されます。
tcpflow -c -r a.cap
直接キャプチャすれば TCP ストリームをリアルタイム表示できます。
tcpflow -c port 80
tcpdump からパイプもできます。
tcpdump -nn port 80 -w - | tcpflow -c -r -
さいごに
いつも tcpdump でキャプったファイルをローカルに落としてから GUI の wireshark で開いていました・・なぜ今まで tshark や tcpflow のことを知らなかったのか・・今思うとものすごい面倒なことしてました。