1 はじめに
tcpdumpを実行すると、採取したパケットがパケットファイルに保存されます。 保存するディレクトリには容量の制限があるため、そのままtcpdumpを実行し続けることはできません。 また、途中でtcpdumpを終了すると、採取したいパケットがパケットファイルに保存できません。 そのため、パケットファイルをリングバッファのように順次切り替えながら使う必要があります。 ここでは、パケットファイルを時間で切り替える方法とサイズで切り替える方法について説明します。
なお、tcpdumpの基本的な使い方は、tcpdumpの使い方(基本編) - hana_shinのLinux技術ブログを参照してください。
2 検証環境
2. 1 ネットワーク構成
サーバとクライアントの2台構成です。図中のens33はNICの名前です。
192.168.2.0/24 client(ens33) -------------------------------------(ens33) server .115 .120
2.2 版数
サーバ、クライアントともに下記版数です。
[root@server ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)
カーネル版数は以下のとおりです。
[root@server ~]# uname -r 3.10.0-1160.el7.x86_64
2.3 tcpdumpの版数
コマンドの確認方法がわからないので、パッケージ版数を以下に示します。
[root@server ~]# rpm -qa|grep tcpdump tcpdump-4.9.2-4.el7_7.1.x86_64
3 時間でパケットファイルを切り替える方法
一定の時間が経過したら、tcpdumpが出力するパケットファイルを切り替える方法について説明します。
3.1 事前準備
パケットファイルを保存するディレクトリを作成します。
[root@server ~]# mkdir /tcpdump
[root@server ~]# chown tcpdump:tcpdump /tcpdump
ディレクトリの所有者を確認します。 ディレクトリの所有者がtcpdumpになっていることがわかります。
[root@server ~]# ls -ld /tcpdump/ drwxr-xr-x. 2 tcpdump tcpdump 6 12月 24 18:30 /tcpdump/
次に、ディレクトリに保存できるパケットファイルの数を3に制限するシェルスクリプトを作成します。
[root@server ~]# vi /usr/local/bin/tcpdump_time_limit.sh [root@server ~]# cat /usr/local/bin/tcpdump_time_limit.sh #!/usr/bin/bash file_num=$(ls /tcpdump/tcpdump*.cap|wc -l) if [ $file_num -gt 3 ]; then file_name=$(ls -tr /tcpdump/tcpdump*.cap|head -n 1) rm -f $file_name fi
[root@server ~]# chown tcpdump:tcpdump /usr/local/bin/tcpdump_time_limit.sh
[root@server ~]# chmod 744 /usr/local/bin/tcpdump_time_limit.sh
[root@server ~]# ls -l /usr/local/bin/tcpdump_time_limit.sh -rwxr--r--. 1 tcpdump tcpdump 165 12月 24 18:31 /usr/local/bin/tcpdump_time_limit.sh
3.2 実験結果
[root@server ~]# cd /tcpdump/ [root@server tcpdump]#
tcpdumpを実行します。 このとき、-Gオプションを指定して、5秒毎にパケットファイルを切り替えます。
[root@server tcpdump]# tcpdump -i ens33 -G 5 -w tcpdump_%Y%m%d_%H%M%S.cap -z /usr/local/bin/tcpdump_time_limit.sh
もう1つターミナルを開きます。lsコマンドを実行します。 パケットファイルの末尾2桁が秒を表しています。
[root@server tcpdump]# ls -l 合計 8 -rw-r--r--. 1 tcpdump tcpdump 1860 12月 24 18:44 tcpdump_20211224_184426.cap -rw-r--r--. 1 tcpdump tcpdump 766 12月 24 18:44 tcpdump_20211224_184431.cap -rw-r--r--. 1 tcpdump tcpdump 0 12月 24 18:44 tcpdump_20211224_184437.cap
再度lsコマンドを実行します。 5秒毎にパケットファイルが切り替わっていることがわかります。
[root@server tcpdump]# ls -l 合計 8 -rw-r--r--. 1 tcpdump tcpdump 1860 12月 24 18:44 tcpdump_20211224_184426.cap -rw-r--r--. 1 tcpdump tcpdump 766 12月 24 18:44 tcpdump_20211224_184431.cap -rw-r--r--. 1 tcpdump tcpdump 0 12月 24 18:44 tcpdump_20211224_184437.cap
4 サイズでパケットファイルを切り替える方法
パケットファイルのサイズが指定したサイズになったら、パケットファイルを別のパケットファイルに切り替える方法について説明します。
4.1 事前準備
パケットファイルを保存するディレクトリを作成します。
[root@server ~]# mkdir /tcpdump
[root@server ~]# chown tcpdump:tcpdump /tcpdump
ディレクトリの所有者を確認します。 ディレクトリの所有者がtcpdumpになっていることがわかります。
[root@server ~]# ls -ld /tcpdump/ drwxr-xr-x. 2 tcpdump tcpdump 6 12月 24 19:33 /tcpdump/
次に、ディレクトリに保存できるパケットファイルの数を3に制限するシェルスクリプトを作成します。 3章で作成したシェルスクリプトとパケットファイルの指定方法が微妙に違うので注意してください。
[root@server ~]# vi /usr/local/bin/tcpdump_size_limit.sh [root@server ~]# cat /usr/local/bin/tcpdump_size_limit.sh #!/usr/bin/bash file_num=$(ls /tcpdump/tcpdump.cap* | wc -l) if [ $file_num -gt 3 ]; then file_name=$(ls -tr /tcpdump/tcpdump.cap* | head -n 1) rm -f $file_name fi
[root@server ~]# chown tcpdump:tcpdump /usr/local/bin/tcpdump_size_limit.sh
[root@server ~]# chmod 744 /usr/local/bin/tcpdump_size_limit.sh
[root@server ~]# ls -l /usr/local/bin/tcpdump_size_limit.sh -rwxr--r--. 1 tcpdump tcpdump 165 12月 24 19:34 /usr/local/bin/tcpdump_size_limit.sh
4.2 実験結果
[root@server ~]# cd /tcpdump/ [root@server tcpdump]#
tcpdumpを実行します。 このとき、-Cオプションを指定して、パケットファイルのサイズ(M単位)を指定します。 ここでは、パケットファイルのサイズを1Mに指定しています。
[root@server tcpdump]# tcpdump -i ens33 -C 1 -w tcpdump.cap -z /usr/local/bin/tcpdump_size_limit.sh
サーバに対してflood pingを実行します。 pingの使い方は、 pingコマンドの使い方 - hana_shinのLinux技術ブログを参照ください。
[root@client ~]# ping -f 192.168.2.100 PING 192.168.2.100 (192.168.2.100) 56(84) bytes of data.
lsコマンドを実行します。 パケットファイルのサイズが1Mであることがわかります。 なお、サイズを指定した場合、パケットファイルの拡張子が"cap数字"となってしまいます。 拡張子をcapにできる方法をご存じの方がいましたら、教えてください。
[root@server tcpdump]# ls -l 合計 2408 -rw-r--r--. 1 tcpdump tcpdump 1000070 12月 24 20:08 tcpdump.cap16 -rw-r--r--. 1 tcpdump tcpdump 1000066 12月 24 20:08 tcpdump.cap17 -rw-r--r--. 1 tcpdump tcpdump 458752 12月 24 20:08 tcpdump.cap18
[root@server tcpdump]# ls -l 合計 2012 -rw-r--r--. 1 tcpdump tcpdump 1000110 12月 24 20:09 tcpdump.cap22 -rw-r--r--. 1 tcpdump tcpdump 1000086 12月 24 20:09 tcpdump.cap23 -rw-r--r--. 1 tcpdump tcpdump 53248 12月 24 20:09 tcpdump.cap24
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。 Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ