TCPDump On an External Hard Drive
Introduction
I'm using tcpdump to store packets and thought that it might be a good idea to put it on an external drive. It turned out to be a little more complicated than I thought it would be so here are my notes.
Setting Up The Drive
The first thing I wanted to do was format the drive. First I needed to get the name.
sudo lshw -C disk
Gave me this
*-disk description: SCSI Disk product: Elements 25A1 vendor: WD physical id: 0.0.0 bus info: scsi@1:0.0.0 logical name: /dev/sda version: 1014 serial: WX71D186F83C size: 3725GiB (4TB) capabilities: gpt-1.00 partitioned partitioned:gpt configuration: ansiversion=6 guid=7ff8067e-6905-4746-a8ec-f3a1f90f99d0 logicalsectorsize=512 sectorsize=4096
So it's named /dev/sda
. Now let's see if it's mounted.
lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT sda └─sda1 ntfs Elements A4F2DF7DF2DF5262 mmcblk0 ├─mmcblk0p1 vfat PI_BOOT EAD0-90DA /boot └─mmcblk0p2 ext4 PI_ROOT 9d97a4df-a4eb-4b09-92b6-bb1ccfade0ee /
So you can see that there is a partition named sda1
and it's formatted using ntfs
and it isn't mounted. Since I'm running it with linux I'll reformant the drive using ext4
. I'm also going to give it the label westerndigital
.
sudo mkfs -t ext4 -L westerndigital /dev/sda1
mke2fs 1.42.13 (17-May-2015) /dev/sda1 contains a ntfs file system labelled 'Elements' Proceed anyway? (y,n) y
Apparently Western Digital named the partition Elements
. I entered y
and continued.
Creating filesystem with 976745728 4k blocks and 244187136 inodes Filesystem UUID: 00fb2543-edc3-4f84-874b-fc36c485f362 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848, 512000000, 550731776, 644972544
So checking it again.
lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT sda └─sda1 ext4 westerndigital cd10dc9f-7420-4b85-87ff-b8dfbf57f031 mmcblk0 ├─mmcblk0p1 vfat PI_BOOT EAD0-90DA /boot └─mmcblk0p2 ext4 PI_ROOT 9d97a4df-a4eb-4b09-92b6-bb1ccfade0ee /
Shows that it's now ext4
and it has the label westerndigital
. According to this page the Hardware Abstraction Layer (HAL) will auto-mount drives that have labels, although I haven't tested this yet.
Mounting It
First make a directory for it.
sudo mkdir /media/westerndigital
Then mount it.
sudo mount /dev/sda1 /media/westerndigital/
Now we can check on it.
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 3.7T 0 disk └─sda1 8:1 0 3.7T 0 part /media/westerndigital mmcblk0 179:0 0 29.8G 0 disk ├─mmcblk0p1 179:1 0 63M 0 part /boot └─mmcblk0p2 179:2 0 29.8G 0 part /
So we can see that it's mounted at /media/westerndigital/
.
Running TCP Dump with Rotating files
First I needed to put the wireless interface into monitor mode.
iwconfig wlx00c0ca967afb mode monitor
Then I ran tcpdump.
sudo tcpdump -n -w /media/westerndigital//channel_6.pcap -C 1000 -W 10 --snapshot-length 0 --interface wlx00c0ca967afb -z gzip --relinquish-privileges erysichthon
Which gave me this.
tcpdump: /media/westerndigital//channel_6.pcap0: Permission denied
On my desktop the solution was in the comments of this StackOverflow post.
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.tcpdump
But on my raspberry pi this raised an error.
Cache read/write disabled: interface file missing. (Kernel needs AppArmor 2.4 compatibility patch.) Warning: unable to find a suitable fs in /proc/mounts, is it mounted? Use --subdomainfs to override.
The solution was in the same post. I just made the permissions wide open.
sudo chmod 777 /media/westerndigital
This is probably a security risk, but it works.