tcpdump抓包及tshark解包方法介紹
阿新 • • 發佈:2021-02-01
tshark是wireshark的命令列工具,通過shell命令抓取、解析報文。tcpdump是Linux系統下的抓包工具。wireshark和tcpdump都共同使用 libpcap作為其底層抓包的庫,tshark也可以抓取報文。
有時候需要在linux系統或者ARM開發板中進行抓包,使用tcpdump抓包更加方便,在這種場景下,一般使用tcpdump進行抓包,然後在Windows中使用wireshark來分析生成的包檔案,在自動化分析或者自動化測試中,可以使用tshark來進行包解析。本文介紹使用tcpdump抓取報文後使用tshark進行報文解析。
# 安裝
wireshark下載安裝
wireshark官網:[https://www.wireshark.org/download.html](https://www.wireshark.org/download.html)
```bash
# linux
yum -y install wireshark
yum -y install tcpdump
```
# tcpdump抓包
tcpdump官方文件:[https://www.tcpdump.org/index.html#documentation](https://www.tcpdump.org/index.html#documentation)
## 抓包
抓取eth1網絡卡資料包,資料寫入檔案/tmp/packet.pcap
```shell
tcpdump -i eth1 -w /tmp/packet.pcap >/dev/null 2>&1 &
```
其中
- \>/dev/null:將標準輸出(控制檯輸出)重定向到/dev/null中,/dev/null代表 linux 的空裝置檔案。表示不輸出內容
- 2>&1:重定向繫結,錯誤輸出(2)和標準輸出(1)輸出到同一個地方
- \>/dev/null 2>&1的作用就是丟棄標準輸出和錯誤輸出,不會輸出任何資訊到控制檯。
也可以只抓取特定協議的報文,比如過濾tcp報文:
```shell
tcpdump -i eth1 tcp -w /tmp/packet.pcap >/dev/null 2>&1 &
```
## 停止抓包
如果沒有限制 tcpdump 抓包的數量(-c 引數),tcpdump 會持續抓包。可以通過 Ctrl+C 來停止抓包,或者殺掉tcpdump程序:
```shell
killall -9 tcpdump
```
殺掉tcpdump程序後會停止抓包。
# tshark命令解析資料包
抓包完成後對資料包進行解析,下面介紹使用tshark解析資料包。
## tshark工具介紹
tshark參考文件:[https://www.wireshark.org/docs/man-pages/tshark.html](https://www.wireshark.org/docs/man-pages/tshark.html)
如果要在windows命令列視窗使用tshark需要將Wireshark安裝路徑 C:\Program Files\Wireshark 新增到環境變數。
![](https://img2020.cnblogs.com/blog/2229336/202101/2229336-20210116233546748-1895654316.png)
Linux系統和windows系統tshark使用方法一樣
## tshark命令解析資料包
常用引數:
* -r:指定需要解析的資料包
* -T:指定資料包解析輸出格式,支援格式見[解碼所有資料](#解碼所有資料),這裡介紹 `-T fields`,一般與`-e` 選項連用。
* -e:指定過濾的欄位
* -E:可用於指定分隔符:` separator=,`:預設分隔符為縮排(\t)
* -Y:過濾指定報文
```shell
tshark [