- 1 mergcapコマンドとは?
- 2 検証環境
- 3 インストール方法
- 4 オプション一覧
- 5 事前準備
- 6 pcapファイルの結合順序の確認
- 7 pcapファイルの結合順序を指定する方法(-a)
- Z 参考情報
1 mergcapコマンドとは?
tcpdumpやwiresharkで採取した複数のキャプチャファイルを1つのファイルに結合するコマンドです。tcpdumpの使い方(パケットファイルの切り替え方法) - hana_shinのLinux技術ブログで説明したように、キャプチャファイルを順次切り替えながら保存した場合、保存した複数のキャプチャファイルを1つに結合する場合に有効なコマンドです。
2 検証環境
AlmaLinux版数は以下のとおりです。
[root@server ~]# cat /etc/redhat-release AlmaLinux release 8.6 (Sky Tiger)
カーネル版数は以下のとおりです。
[root@server ~]# uname -r 4.18.0-372.9.1.el8.x86_64
3 インストール方法
wiresharkパッケージをインストールします。
[root@server ~]# dnf -y install wireshark
mergecapコマンドの版数を確認します。
[root@server ~]# mergecap --version Mergecap (Wireshark) 2.6.2 (v2.6.2) -snip-
4 オプション一覧
オプション一覧は以下のとおりです。
[root@server ~]# mergecap -h Mergecap (Wireshark) 2.6.2 (v2.6.2) Merge two or more capture files into one. See https://www.wireshark.org for more information. Usage: mergecap [options] -w <outfile>|- <infile> [<infile> ...] Output: -a concatenate rather than merge files. default is to merge based on frame timestamps. -s <snaplen> truncate packets to <snaplen> bytes of data. -w <outfile>|- set the output filename to <outfile> or '-' for stdout. -F <capture type> set the output file type; default is pcapng. an empty "-F" option will list the file types. -I <IDB merge mode> set the merge mode for Interface Description Blocks; default is 'all'. an empty "-I" option will list the merge modes. Miscellaneous: -h display this help and exit. -v verbose output.
5 事前準備
5.1 ICMPパケットの採取
tcpdumpコマンドを実行して、ICMPパケットを採取します。なお、tcpdumpコマンドの使い方は、tcpdumpの使い方(基本編) - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# tcpdump -i eth0 icmp -w 1.cap
もう1つターミナルを開いて、デフォルトGWに対してpingを実行します。pingコマンドの使い方は、pingコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# ping -c 1 192.168.122.1
Ctrl+Cを押下して、tcpdumpコマンドを終了します。
[root@server ~]# tcpdump -i eth0 icmp -w 1.cap dropped privs to tcpdump tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes ^C2 packets captured 2 packets received by filter 0 packets dropped by kernel
キャプチャしたファイルを確認します。
[root@server ~]# ls -l 1.cap -rw-r--r--. 1 tcpdump tcpdump 252 3月 30 21:49 1.cap
5.2 DNSパケットの採取
tcpdumpコマンドを実行して、DNSパケットを採取します。
[root@server ~]# tcpdump -i eth0 udp port 53 -w 2.cap
digコマンドを実行して、DNSパケットを送信します。digコマンドの使い方は、digコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# dig ntp.nict.jp +short
Ctrl+Cを押下して、tcpdumpコマンドを終了します。
[root@server ~]# tcpdump -i eth0 udp port 53 -w 2.cap dropped privs to tcpdump tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes ^C2 packets captured 2 packets received by filter 0 packets dropped by kernel
キャプチャしたファイルを確認します。
[root@server ~]# ls -l 2.cap -rw-r--r--. 1 tcpdump tcpdump 312 3月 30 22:01 2.cap
5.3 ARPパケットの採取
tcpdumpコマンドを実行して、ARPパケットを採取します。
[root@server ~]# tcpdump -i eth0 arp -w 3.cap
arpingコマンドを実行して、ARPパケットを送信します。arpingコマンドの使い方は、arpingコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# arping -c 1 -I eth0 192.168.122.1
Ctrl+Cを押下して、tcpdumpコマンドを終了します。
[root@server ~]# tcpdump -i eth0 arp -w 3.cap dropped privs to tcpdump tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes ^C2 packets captured 2 packets received by filter 0 packets dropped by kernel
キャプチャしたファイルを確認します。
[root@server ~]# ls -l 3.cap -rw-r--r--. 1 tcpdump tcpdump 140 3月 30 22:03 3.cap
5.4 pcapファイルの中身確認
1.capファイルの中身を確認すると、ICMPパケットが採取されていることがわかります。なお、tsharkコマンドの使い方は、tsharkコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# tshark -r 1.cap -ta Running as user "root" and group "root". This could be dangerous. 1 21:49:00.619951 192.168.122.25 → 192.168.122.1 ICMP 98 Echo (ping) request id=0x0001, seq=1/256, ttl=64 2 21:49:00.620536 192.168.122.1 → 192.168.122.25 ICMP 98 Echo (ping) reply id=0x0001, seq=1/256, ttl=64 (request in 1)
2.capファイルの中身を確認すると、DNSパケットが採取されていることがわかります。
[root@server ~]# tshark -r 2.cap -ta Running as user "root" and group "root". This could be dangerous. 1 22:00:42.157615 192.168.122.25 → 192.168.122.1 DNS 94 Standard query 0x9cc1 A ntp.nict.jp OPT 2 22:00:42.183998 192.168.122.1 → 192.168.122.25 DNS 162 Standard query response 0x9cc1 A ntp.nict.jp A 133.243.238.164 A 133.243.238.163 A 61.205.120.130 A 133.243.238.243 A 133.243.238.244 OPT
3.capファイルの中身を確認すると、ARPパケットが採取されていることがわかります。
[root@server ~]# tshark -r 3.cap -ta Running as user "root" and group "root". This could be dangerous. 1 22:03:33.063430 RealtekU_68:ba:62 → Broadcast ARP 42 Who has 192.168.122.1? Tell 192.168.122.25 2 22:03:33.063948 RealtekU_02:06:f9 → RealtekU_68:ba:62 ARP 42 192.168.122.1 is at 52:54:00:02:06:f9
6 pcapファイルの結合順序の確認
6.1 時刻の新しい順序(3.cap,2cap,1,cap)でpcapファイルを結合した場合
時刻の新しい順にpcapファイルを結合します。
[root@server ~]# mergecap -w test1.cap 3.cap 2.cap 1.cap
pcapファイルの中身を確認すると、時刻が古い順になっていることがわかります。tsharkコマンドの使い方は、tsharkコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# tshark -r test1.cap -ta Running as user "root" and group "root". This could be dangerous. 1 21:49:00.619951 192.168.122.25 → 192.168.122.1 ICMP 98 Echo (ping) request id=0x0001, seq=1/256, ttl=64 2 21:49:00.620536 192.168.122.1 → 192.168.122.25 ICMP 98 Echo (ping) reply id=0x0001, seq=1/256, ttl=64 (request in 1) 3 22:00:42.157615 192.168.122.25 → 192.168.122.1 DNS 94 Standard query 0x9cc1 A ntp.nict.jp OPT 4 22:00:42.183998 192.168.122.1 → 192.168.122.25 DNS 162 Standard query response 0x9cc1 A ntp.nict.jp A 133.243.238.164 A 133.243.238.163 A 61.205.120.130 A 133.243.238.243 A 133.243.238.244 OPT 5 22:03:33.063430 RealtekU_68:ba:62 → Broadcast ARP 42 Who has 192.168.122.1? Tell 192.168.122.25 6 22:03:33.063948 RealtekU_02:06:f9 → RealtekU_68:ba:62 ARP 42 192.168.122.1 is at 52:54:00:02:06:f9
6.2 時刻の古い順序(1.cap,2cap,3,cap)でpcapファイルを結合した場合
時刻の古い順にpcapファイルを結合します。
[root@server ~]# mergecap -w test2.cap 1.cap 2.cap 3.cap
pcapファイルの中身を確認すると、時刻が古い順になっていることがわかります。
[root@server ~]# tshark -r test2.cap -ta Running as user "root" and group "root". This could be dangerous. 1 21:49:00.619951 192.168.122.25 → 192.168.122.1 ICMP 98 Echo (ping) request id=0x0001, seq=1/256, ttl=64 2 21:49:00.620536 192.168.122.1 → 192.168.122.25 ICMP 98 Echo (ping) reply id=0x0001, seq=1/256, ttl=64 (request in 1) 3 22:00:42.157615 192.168.122.25 → 192.168.122.1 DNS 94 Standard query 0x9cc1 A ntp.nict.jp OPT 4 22:00:42.183998 192.168.122.1 → 192.168.122.25 DNS 162 Standard query response 0x9cc1 A ntp.nict.jp A 133.243.238.164 A 133.243.238.163 A 61.205.120.130 A 133.243.238.243 A 133.243.238.244 OPT 5 22:03:33.063430 RealtekU_68:ba:62 → Broadcast ARP 42 Who has 192.168.122.1? Tell 192.168.122.25 6 22:03:33.063948 RealtekU_02:06:f9 → RealtekU_68:ba:62 ARP 42 192.168.122.1 is at 52:54:00:02:06:f9
6.3 まとめ
mergecapが各pcapファイルの時刻を判定して、時刻の古い順にpcapを結合することがわかるります。(manの説明通り)
7 pcapファイルの結合順序を指定する方法(-a)
-aはmergecapコマンドに指定した順序でpcapファイルを結合するオプションです。
[root@server ~]# mergecap -a -w test3.cap 3.cap 2.cap 1.cap
pcapファイルの中身を確認すると、時刻が新しい順になっていることがわかります。
[root@server ~]# tshark -r test3.cap -ta Running as user "root" and group "root". This could be dangerous. 1 22:03:33.063430 RealtekU_68:ba:62 → Broadcast ARP 42 Who has 192.168.122.1? Tell 192.168.122.25 2 22:03:33.063948 RealtekU_02:06:f9 → RealtekU_68:ba:62 ARP 42 192.168.122.1 is at 52:54:00:02:06:f9 3 22:00:42.157615 192.168.122.25 → 192.168.122.1 DNS 94 Standard query 0x9cc1 A ntp.nict.jp OPT 4 22:00:42.183998 192.168.122.1 → 192.168.122.25 DNS 162 Standard query response 0x9cc1 A ntp.nict.jp A 133.243.238.164 A 133.243.238.163 A 61.205.120.130 A 133.243.238.243 A 133.243.238.244 OPT 5 21:49:00.619951 192.168.122.25 → 192.168.122.1 ICMP 98 Echo (ping) request id=0x0001, seq=1/256, ttl=64 6 21:49:00.620536 192.168.122.1 → 192.168.122.25 ICMP 98 Echo (ping) reply id=0x0001, seq=1/256, ttl=64 (request in 5)
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ