tshark是wireshark的命令行工具,經過shell命令抓取、解析報文。tcpdump是Linux系統下的抓包工具。wireshark和tcpdump都共同使用 libpcap做爲其底層抓包的庫,tshark也能夠抓取報文。html
有時候須要在linux系統或者ARM開發板中進行抓包,使用tcpdump抓包更加方便,在這種場景下,通常使用tcpdump進行抓包,而後在Windows中使用wireshark來分析生成的包文件,在自動化分析或者自動化測試中,可使用tshark來進行包解析。本文介紹使用tcpdump抓取報文後使用tshark進行報文解析。python
wireshark下載安裝
wireshark官網:https://www.wireshark.org/download.htmllinux
# linux yum -y install wireshark yum -y install tcpdump
tcpdump官方文檔:https://www.tcpdump.org/index.html#documentationshell
抓取eth1網卡數據包,數據寫入文件/tmp/packet.pcapjson
tcpdump -i eth1 -w /tmp/packet.pcap >/dev/null 2>&1 &
其中windows
也能夠只抓取特定協議的報文,好比過濾tcp報文:bash
tcpdump -i eth1 tcp -w /tmp/packet.pcap >/dev/null 2>&1 &
若是沒有限制 tcpdump 抓包的數量(-c 參數),tcpdump 會持續抓包。能夠經過 Ctrl+C 來中止抓包,或者殺掉tcpdump進程:tcp
killall -9 tcpdump
殺掉tcpdump進程後會中止抓包。工具
抓包完成後對數據包進行解析,下面介紹使用tshark解析數據包。測試
tshark參考文檔:https://www.wireshark.org/docs/man-pages/tshark.html
若是要在windows命令行窗口使用tshark須要將Wireshark安裝路徑 C:\Program Files\Wireshark 添加到環境變量。
Linux系統和windows系統tshark使用方法同樣
經常使用參數:
-T fields
,通常與-e
選項連用。 separator=,
:默認分隔符爲縮進(\t)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
xml文檔可使用python的ElementTree工具解析:
try: import xml.etree.cElementTree as ET except ImportError: import xml.etree.ElementTree as ET
系統:windows10
tshark已加入環境變量中
輸入tshark,顯示:
C:\Users\DELL>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:\WINDOWS\system32>net start npf 服務名無效。 請鍵入 NET HELPMSG 2185 以得到更多的幫助。
卸載WinPcap10,下載安裝winpcap4.1.3:https://www.winpcap.org/install/default.htm
從新輸入net start npf
啓動NPF:
C:\WINDOWS\system32>net start npf 請求的服務已經啓動。 請鍵入 NET HELPMSG 2182 以得到更多的幫助。
啓動成功!
tshark命令也能夠正常使用了
文章標題:tcpdump抓包及tshark命令解包方法介紹
本文做者:hiyo
本文連接:https://www.cnblogs.com/hiyong/p/14288239.html 歡迎關注公衆號:「測試開發小記」及時接收最新技術文章!