我正在嘗試將 tcpdump 生成的 .pcap 封包擷取檔案轉換為文字格式。每當我嘗試轉換 .pcap 文件,甚至只是將 tcpdump 的標準輸出端口“>”到文字文件時,我都會收到權限錯誤。
方法一:
使用生成資料包擷取文件
sudo tcpdump -i wlan0 -w /var/log/tcpdump/tcpdump-log-06-03-2015.pcap
嘗試使用轉換 .pcap 文件
sudo tshark -V -r tcpdump-log-06-03-2015.pcap > tcpdump-log-06-03-2015.txt
但我收到這樣的權限被拒絕錯誤:
bash: tcpdump-log-06-03-2015.txt: Permission denied
方法二:
使用生成資料包擷取文件
sudo tcpdump -i wlan0 > /var/log/tcpdump/tcpdump-log-06-03-2015.txt
我收到類似的權限被拒絕錯誤:
bash: /var/log/tcpdump/tcpdump-log-06-03-2015.txt: Permission denied
由於我以 sudo 身份運行這兩個命令,因此我認為權限不是問題。
我透過執行以下命令禁用了 tcpdump 的 apparmor:
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.tcpdump
誰能解釋為什麼會發生這種情況?或者建議一種更好的方法來為 tcpdump 產生可讀的文字輸出?
答案1
問題是命令的重定向部分是以您而不是 root 身份執行的。
因此,如果您想保持目標目錄不變,那麼您需要讓該部分也以 root 身分運行。或者,您可以將目標目錄設定為您具有寫入權限的目錄。
顯示為什麼它不起作用的範例(注意結果檔案的權限):
$ sudo tcpdump -n -tttt -r eth1-2015-04-16-17-01-35.bin > vvvbbb.txt
reading from file eth1-2015-04-16-17-01-35.bin, link-type EN10MB (Ethernet)
$ ls -l vvvbbb.txt
-rw-rw-r-- 1 doug doug 5418673 Jun 2 16:53 vvvbbb.txt
可行的方法範例(再次注意產生檔案的權限):
$ sudo su
# tcpdump -n -tttt -r eth1-2015-04-16-17-01-35.bin >vvvbbb.txt
reading from file eth1-2015-04-16-17-01-35.bin, link-type EN10MB (Ethernet)
# ls -l vvvbbb.txt
-rw-r--r-- 1 root root 5418673 Jun 2 16:57 vvvbbb.txt
# exit
exit
$
另一種方法的範例可以工作,但也會噴射到終端,這可能是不可取的:
$ sudo tcpdump -n -tttt -r eth1-2015-04-16-17-01-35.bin | sudo tee vvvbbb.txt
... delete tons of spew to terminal ...
$ ls -l vvv*.txt
-rw-r--r-- 1 root root 5418673 Jun 2 17:01 vvvbbb.txt
注意:我在這裡使用 tcpdump 而不是 tshark,但這只是因為我沒有安裝 tshark。