ブログ

Armadillo-840でtcpdumpを使う

at_takuya.sasaki
2015年3月15日 19時50分

Armadillo-840でLANで受信したパケットをダンプして解析する手順をまとまめてみました。今回はRTPプロトコルで流れてくるH.264データをダンプ/解析してみたいと思います。

1. Debianパッケージからtcpdumpを持ってきます

今回はtcpdumpのバイナリはDebianパッケージから持ってきます。

1.1 ATDE5上で、以下の2つのパッケージをダウンロードしてください。
atmark@atde5:~$ wget http://ftp.jp.debian.org/debian/pool/main/t/tcpdump/tcpdump_4.3.0-1+deb7u1_armhf.deb
atmark@atde5:~$ wget http://ftp.jp.debian.org/debian/pool/main/libp/libpcap/libpcap0.8_1.3.0-1_armhf.deb
1.2 Debianパッケージを展開します
atmark@atde5:~$ dpkg -x tcpdump_4.3.0-1+deb7u1_armhf.deb .
atmark@atde5:~$ dpkg -x libpcap0.8_1.3.0-1_armhf.deb .
1.3 以下の2つのファイルをUSBメモリなどに保存してください。
  • tcpdump
  • libpcap.so.1.3.0
atmark@atde5:~$ ls usr/sbin/tcpdump 
usr/sbin/tcpdump
atmark@atde5:~$ ls usr/lib/arm-linux-gnueabihf/libpcap.so.1.3.0 
usr/lib/arm-linux-gnueabihf/libpcap.so.1.3.0

2. Armadillo-840を起動して、ダンプの準備をします

2.1 Armadillo-840を起動し、TeraTermなどでログインします。
2.2 USBメモリをArmadillo-840のホストポートに接続します。

以下のようなメッセージが出るはずです。

[root@armadillo840-0 (ttySC2) /]# usb 1-1: new high-speed USB device number 3 using rmobile-ehci-driver
scsi1 : usb-storage 1-1:1.0
scsi 1:0:0:0: Direct-Access     BUFFALO  USB Flash Disk   4000 PQ: 0 ANSI: 4
sd 1:0:0:0: [sda] 15950592 512-byte logical blocks: (8.16 GB/7.60 GiB)
sd 1:0:0:0: [sda] Write Protect is off
sd 1:0:0:0: [sda] No Caching mode page found
sd 1:0:0:0: [sda] Assuming drive cache: write through
sd 1:0:0:0: [sda] No Caching mode page found
sd 1:0:0:0: [sda] Assuming drive cache: write through
 sda: sda1
sd 1:0:0:0: [sda] No Caching mode page found
sd 1:0:0:0: [sda] Assuming drive cache: write through
sd 1:0:0:0: [sda] Attached SCSI removable disk
2.3 Enterキーを押してプロンプトを出してから、以下のコマンドでマウントします。
[root@armadillo840-0 (ttySC2) ~]# mount -t vfat /dev/sda1 /mnt
FAT-fs (sda1): utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!
2.4 以下のコマンドでライブラリをコピーします。
[root@armadillo840-0 (ttySC2) ~]# cd /mnt
[root@armadillo840-0 (ttySC2) /mnt]# cp libpcap.so.1.3.0 /lib/libpcap.so.0.8

3. ダンプを開始します

3.1 tcpdumpに実行権限をつけてダンプを開始します。

今回はeth0のインターフェースから流れてくるポート番号5000へのデータをダンプし、RAM上の/home/ftp/pubディレクトリに dump.capという名前のファイルで保存します。tcpdumpの使い方はhelpなどを参照してください。

[root@armadillo840-0 (ttySC2) /mnt]# chmod +x tcpdump
root@armadillo840-0 (ttySC2) /mnt]# ./tcpdump -i eth0 -n -nn -x port 5000 -w /home/ftp/pub/dump.cap
 
device eth0 entered promiscuous mode
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 

4 ダンプを終了します

4.1 Armadill-840に対するデータ送信を開始します
4.2 適当な時間ストリーミング配信をした後、Armadillo-840でのキャプチャを[ Ctrl+C ] で停止してください。

以下のようなメッセージが出るはずです。
今回はRAM上にファイルを作成しているので、長時間キャプチャするとメモリが枯渇しますので注意してください。

30531 packets captured
30531 packets received by filterdevice eth0 left promiscuous mode
 
0 packets dropped by kernel
4.3 /home/ftp/pub/dump.capをUSBメモリに保存します。
[root@armadillo840-0 (ttySC2) /mnt]# cp /home/ftp/pub/dump.cap ./
4.4 USBメモリをアンマウントして、取り外します。
[root@armadillo840-0 (ttySC2) /mnt]# cd
[root@armadillo840-0 (ttySC2) ~]# umount /mnt

5 ダンプしたデータをWiresharkを使って見てみます

5.1 tcpdumpでキャプチャしたファイルは、パケットキャプチャツールの[ Wireshark ] で見ることが可能です。

PCなどにインストールしてみてください。

https://www.wireshark.org/download.html

5.2 USBメモリのdump.capをWireshakで開くと、パケットの内容が参照できます。
5.3 プロトコルなどを指定すると、さらに詳しくパケットの内容を解析してくれます。

以下はH.264データを解析するためのWireshark上での手順です。(参考情報)

1)  Edit -> Preferences... ->
     Protocols -> RTP
       Try to decode RTP outside of conversations 「チェックを入れる」
 
2)  Edit -> Preferences... ->
     Protocols -> H264
       H264 dynamic payload types 「96」に設定する  (*環境によって異なります)
 
3)  Analyze -> Decode As...
     Transport ->  「RTP」を適用する

以上