2021-05-12 14:32:11
tcpdump抓包及tshark解包方法介紹
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
# linux
yum -y install wireshark
yum -y install tcpdump
tcpdump抓包
tcpdump官方檔案:https://www.tcpdump.org/index.html
抓包
抓取eth1網路卡封包,資料寫入檔案/tmp/packet.pcap
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報文:
tcpdump -i eth1 tcp -w /tmp/packet.pcap >/dev/null 2>&1 &
停止抓包
如果沒有限制 tcpdump 抓包的數量(-c 引數),tcpdump 會持續抓包。可以通過 Ctrl+C 來停止抓包,或者殺掉tcpdump程序:
killall -9 tcpdump
殺掉tcpdump程序後會停止抓包。
tshark命令解析封包
抓包完成後對封包進行解析,下面介紹使用tshark解析封包。
tshark工具介紹
tshark參考檔案:https://www.wireshark.org/docs/man-pages/tshark.html
如果要在windows命令列視窗使用tshark需要將Wireshark安裝路徑 C:Program FilesWireshark 新增到環境變數。
Linux系統和windows系統tshark使用方法一樣
tshark命令解析封包
常用引數:
- -r:指定需要解析的封包
- -T:指定封包解析輸出格式,支援格式見解碼所有資料,這裡介紹
-T fields
,一般與-e
選項連用。 - -e:指定過濾的欄位
- -E:可用於指定分隔符:
separator=,
:預設分隔符為縮排(t) - -Y:過濾指定報文
tshark [ -r <infile> ] -T fields [ -e <field> ] -E <field print option> -Y <displaY filter>
tshark -r packet.pcap -T fields -e 解析的欄位 -E separator=,
需要解析的欄位可以通過Wireshark檢視:
選擇要過濾的內容 -> 右鍵 -> Apply as Filter -> Selected
例1:過濾具有源IP和目的IP欄位的所有報文
tshark -r packet.pcap -T fields -e ip.src -e ip.dst
例2:過濾源地址為fe80::ca3a:35ff:fe09:efa1的DHCPv6 Solicit報文,並讀取UDP源埠號和IPv6目的地址。
$ tshark -r packet.pcap -T fields -E separator=, -Y dhcpv6.msgtype==1 -Y ipv6.src==fe80::ca3a:35ff:fe09:efa1 -e udp.srcport -e ipv6.dst
,ff02::2
,ff02::2
,ff02::16
546,ff02::1:2
546,ff02::1:2
546,ff02::1:2
546,ff02::1:2
$
過濾完成後進行進一步的分析
比如可以使用grep命令進一步提取滿足條件的報文
過濾源地址或者目的地址為192.168.5.38的報文
# linux
tshark -r packet.pcap -T fields -e ip.src -e ip.dst | grep 192.168.5.38
# windows
tshark -r packet.pcap -T fields -e ip.src -e ip.dst | findstr 192.168.5.38
也可以使用python、Java等高階語言進行進一步的分析,Python範例如下:
result = os.popen("tshark -r packet.pcap -T fields -e ip.src -e ip.dst「)
ret = result.read() #
for i, value in enumerate(ret.split("n")):
處理value值
pass
解碼所有資料
某些欄位可能無法使用tshark過濾,這種情況下,可以先將pcap檔案解碼,tshark支援如下檔案格式:
ek|fields|json|jsonraw|pdml|ps|psml|tabs|text
解碼成xml和text格式檔案:
tshark -r packet.pcap -V -T pdml > packet.xml
tshark -r packet.pcap -V -T text > packet.txt
- -V:輸出封包詳細資訊
- -T pdml:指定封包解碼輸出格式為xml格式
xml檔案可以使用python的ElementTree工具解析:
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
問題:windows tshark命令無效
系統:windows10
tshark已加入環境變數中
輸入tshark,顯示:
C:UsersDELL>tshark
The NPF driver isn't running. You may have trouble capturing or
listing interfaces.
Capturing on '鏈湴榪炴帴* 9'
WIreshark安裝需要安裝WinPcap,檢視電腦已經安裝了WinPcap。
接下來以管理員身份執行命令列串列埠,輸入net start npf
啟動NPF,出現如下報錯資訊:
C:WINDOWSsystem32>net start npf
服務名無效。
請鍵入 NET HELPMSG 2185 以獲得更多的幫助。
解除安裝WinPcap10,下載安裝winpcap4.1.3:https://www.winpcap.org/install/default.htm
重新輸入net start npf
啟動NPF:
C:WINDOWSsystem32>net start npf
請求的服務已經啟動。
請鍵入 NET HELPMSG 2182 以獲得更多的幫助。
啟動成功!
tshark命令也可以正常使用了
文章標題:tcpdump抓包及tshark命令解包方法介紹
本文作者:hiyo
本文連結:https://www.cnblogs.com/hiyong/p/14288239.html
歡迎關注公眾號:「測試開發小記」及時接收最新技術文章!
相關文章