使用wireshark抓包分析-抓包實用技巧
wireshark抓包
使用wireshark抓包分析-抓包實用技巧
前言
本文整理一下日常抓包使用的一些方法及抓包分析的一些方法。
本文基於wireshark2.2.6版本進行抓包處理。其他版本使用方式大同小異。
自定義捕獲條件
wireshark
可以將抓包數據保存到硬盤上。若需要長時間抓包的話,需要防止內存過大,因此一般需要指定一定大小切包,釋放內存。
在捕獲
-選項
菜單中可以設置捕獲包的一些配置。
輸入配置
在輸入
選項卡中可以選擇抓取指定接口,在下方過濾器中可以輸入過濾條件,比如host 172.17.1.100
抓取指定ip的包,或tcp port 9055
抓取指定端口的包。
輸出配置
在輸出
選項卡中可以設置保存的文件路徑,包數量分組,文件大小分組,文件個數等配置。
- 文件保存路徑:需要設置具體的文件名,wireshark會自動在文件名后加上序號和時間戳信息。比如文件名為
1.pcapng
,則會自動保存為如1_00001_20190625161142.pcapng
的文件名。 - 自動創建新文件可以通過接收到包的數量和大小以及抓包時間進行設置,通常通過文件大小抓包即可。
- 文件個數:通過勾選使用一個喚醒緩沖器來保存最大的文件數量。防止文件過多
在選項
選項卡中還有一些其他的配置,根據實際情況決定是否勾選。
命令行抓包
wireshark
提供了很強大的GUI界面,但是在生產環境長時間抓包使用GUI界面有以下問題,界面刷新需要消耗資源,且GUI界面相比命令行界面,易出現閃退,卡死等不穩定現象,同時即使配置了切包,也會占用極大的內存,需要將包信息顯示在界面,因此必須要等每次切包后才能釋放內存。相比命令行將數據持久化到硬盤上會立即釋放內存,因為界面上只需要顯示簡單的抓包數量和文件保存路徑等信息。
下圖是通過GUI界面進行抓包的內存占用情況,配置的是100M切一個文件,一般需要占用幾百兆的內存。
下圖是通過命令行抓包的內存占用情況,配置的是100M切一個文件,僅僅占用幾兆內存。
在wireshark
安裝目錄除了wireshark
用於GUI界面的抓包程序以外還有一些其他的工具,比如reordercap
、text2pcap
、tshark
、rawshark
、mergecap
、mmdbresolve
、capinfos
、dumpcap
、editcap
等,其中tshark
和dumpcap
是用於命令行抓包的工具。tshark
就是命令行版的wireshark
,tshark
底層使用的即為dumpcap
,因此tshark
的功能相對強大一些,性能上則弱於dumpcap
。
下圖是在傳輸速率為每秒37244,共傳輸1000000個825B大小的幀下產生的測試結果。
具體相關測試可以到Wireshark Packet Capture: Tshark Vs. Dumpcap查看,里面還有更多的不同的基准測試結果。(可能需要FQ)。
我們可以通過dumpcap抓包,然后通過tshark或wireshark進行包分析。
通過dumpcap -h
查看命令參數。
-i
: 抓取哪個網絡接口的包-f
: 過濾器,只抓取滿足過濾器的包。-b filesize
: 保存文件大小,即切包大小。-b files:20
: 保存文件個數。-w
: 保存的文件名。
在wireshark安裝目錄有
*.html
包含各個工具的命令及示例。
通過以上參數可以實現和GUI界面通過的抓包策略。比如dumpcap -i 1 -f "tcp port 8080" -w D:\1.pcapng -b filesize:100000 -b files:20
表示抓取接口1的8080端口的tcp包,將數據保存到D:\1.pcapng
路徑下,通過100M切一個文件,最多保存20個最新的文件。
抓取多個接口
若需要抓取多個接口的包,則通過多個-i
參數指定,通過每個-i
參數后面可以帶上-f
配置過濾器。比如dumpcap -i 1 -i 3 -f "tcp port 8080" -w D:\1.pcapng -b
表示抓取接口1和接口3的包。
通常來說我們需要抓取某個ip的包,那么我們需要知道這個ip是那個網絡接口。通過dumpcap -D
可以獲取所有網絡接口。
C:\Users\Dm_ca>dumpcap -D
1. \Device\NPF_{E78E9C1F-C71D-40E6-A233-BEFE0A59FD3F} (浠ュお緗?3)
2. \Device\NPF_{50A4BF57-AEF6-42CB-B481-E3BBE16F784A} (鏈湴榪炴帴* 2)
3. \Device\NPF_{A37B6157-FB22-4FC7-870F-6FB76C950BCE} (vEthernet (Default Switch))
4. \Device\NPF_{B6BC2FEF-E6A0-4E7F-BCF6-A4CBE39560A0} (鏈湴榪炴帴* 8)
5. \Device\NPF_{E3B69F06-9D31-4970-B3B1-F7FC29D6F343} (Npcap Loopback Adapter)
6. \Device\NPF_{B70FF207-6758-49F3-BD8B-1E58EBAAA350} (WLAN)
7. \Device\NPF_{196071AF-E992-498F-99EE-32D5238EE947} (鏈湴榪炴帴* 10)
8. \Device\NPF_{4EA95CCE-F4A3-4C1E-884F-033C2A475349} (鏈湴榪炴帴* 9)
9. \Device\NPF_{2F5E422D-8579-4DA4-BD78-02AE4EAEA836} (浠ュお緗?2)
10. \Device\NPF_{F4BDE9E1-950B-402B-9CD6-281119917271} (鏈湴榪炴帴* 3)
最左邊的為我們輸入的參數-i
的編號,右邊的亂碼的是中文名稱本地連接
等字樣,如果不確定使用哪個網卡,也可以到wireshark
中確認一下。在輸入
選項卡選擇接口下拉會有對應的地址。
命令輸入后就會顯示正在抓包的一些信息,Packets
為抓取的包數,File
為保存的文件名,多切了文件之后,則會顯示多個File
行。
C:\Users\Dm_ca>dumpcap -i 5 -f "tcp" -w E:\1.pcapng -b filesize:100000 -b files:20 Capturing on 'Npcap Loopback Adapter' File: E:\1_00001_20190629091754.pcapng Packets: 4
抓包分析
通過dumpcap
抓包后我們可以將抓包文件通過wireshark
界面打開進行簡單分析。
若需要根據特定條件在大量信息中篩選出想要的信息,則需要通過tshark
進行命令行的篩選。
案例:生產環境中發現時常有丟包現象,通過wireshark
進行簡單分析發現有許多RST的重置連接包。追蹤流查看發現,沒有正常建立連接。
通過tcp.flags.reset == 1
篩選出大量的重置連接。大約占比1%的請求數據量。為了確認每個包是不是都是同樣的原因。我們需要追蹤每個包的流進行查看。
在wireshark
上選擇指定的包右鍵在彈出的菜單中選擇追蹤流
-TCP流
追蹤完整的流。
但是如果要追蹤大量的流,在wireshark
上操作就不太方便了。由於wireshark
不支持批量選擇包跟蹤流,因此只能一個個跟蹤。wireshark
又不支持上一步歷史搜索,追蹤流實際wireshark
是用了tcp.stream eq XXXX
篩選流號。因此我們需要重新在通過前一個篩選指令重新篩選。這樣就非常麻煩,尤其是若一個切包比較大的話,處理起來非常的慢。由於上述原因,我們通過tshark
命令行篩選出異常連接后批量跟蹤每個流並保存到文件進行分析。
批量分析
通過tshark -h
可以查看命令從參數,由於多命令和dumpcap
類似,但是tshark
還擴展了其他命令。-r
: 讀取本地的數據包文件。-R
: 捕獲過濾器,可用於捕獲符合過濾規則的報文。-Y
: 顯示過濾器,用於過濾已捕獲的報文。-2
: 若此時輸入回車,則會將包信息打印到控制台上。-w
: 通過過濾器刪選后的包,保存另存到文件中,比如我們需要從某個包篩選出關鍵信息保存后進行單獨分析。-T fields
: 格式化輸出,輸出屬性,我們要通過-e
篩選包的指定屬性,則需要用該參數。-e
: 獲取指定包屬性,必須先指定-T fields
格式化輸出,若有多個屬性輸出,則使用多個-e
,比如-e tcp.stream -e tcp.port
。
捕獲過濾器
捕獲過濾器是在捕獲菜單中,直接用過濾出指定的條件,不滿足條件的是不會被捕獲的。
顯示過濾器
顯示過濾器則是在已捕獲的包中進行過濾顯示。
捕獲過濾器的規則是host 192.168.0.115 and tcp port 8080
,而對應的顯示過濾器規則是ip.addr eq 192.168.0.115 and tcp.port eq 8080
,兩者的語法還是不同的。
實際通過tshark命令過濾時發現,使用的都是顯示過濾器篩選。而在通過
dumpcap -f
抓包時需要使用捕獲過濾器的語法。
在簡單了解參數之后,開始使用命令篩選出我們需要的包。
批量篩選包
-
篩選出需要的包。通過
tshark -r 172.18.12.1_00085_20190624193404.pcapng -2 -R "tcp.flags.reset == 1"
篩選出我們需要的包。PS E:\wiresharkpackage\analysis-20190625> tshark -r 10.1.13.246-14-25.pcapng -2 -R "tcp.flags.reset == 1" 1 9341.446421 50094 TCP 60 50094 鈫?9055 [RST] Seq=1 Win=0 Len=0 2 164451.986850 9055 TCP 54 9055 鈫?51707 [RST, ACK] Seq=966 Ack=717 Win=0 Len=0 3 196000.984728 9055 TCP 54 9055 鈫?55516 [RST, ACK] Seq=762 Ack=717 Win=0 Len=0 4 206748.235089 21 TCP 54 21 鈫?56839 [RST, ACK] Seq=432 Ack=121 Win=0 Len=0 5 251344.165367 21 TCP 54 21 鈫?61652 [RST, ACK] Seq=433 Ack=121 Win=0 Len=0 6 260534.172129 21 TCP 54 21 鈫?62957 [RST, ACK] Seq=433 Ack=121 Win=0 Len=0 7 271885.709376 21 TCP 54 21 鈫?64407 [RST, ACK] Seq=434 Ack=121 Win=0 Len=0 ...
和
wireshark
界面過濾一樣,它會篩選出所有滿足過濾條件的包。 - 對每個包進行追蹤。由於追蹤包的命令為
tcp.stream eq XXXX
,因此我們需要知道tcp.stream值才可以追蹤該包。我們上面打印出了相關的包信息。通過-e
可以獲取指定的包屬性,因此在上面的條件加上-T fields -e tcp.stream
,表示只需要獲取流號。powershell PS E:\wiresharkpackage\analysis-20190625> tshark -r 10.1.13.246-14-25.pcapng -2 -R "tcp.flags.reset == 1" -T fields -e tcp.stream 103 1048 1319 1419 1544 1687 ...
-
追蹤到流號后我們就需要對每個流進行跟蹤並保存。將流號保存到變量中,遍歷每個流號進行篩選即可,通過
>>
到文本中。在windows下通過powershell
可以很方便的配合tshark命令執行腳本。$streams = tshark -r 10.1.13.246-14-25.pcapng -2 -R "tcp.flags.reset == 1" -T fields -e tcp.stream $streams | foreach {tshark -r 10.1.13.246-14-25.pcapng -2 -R "tcp.stream eq $_" -t ad >> 20190628.txt}
若想要保存成
pcapng
格式,則可以通過拼湊篩選條件進行篩選,然后通過-w
輸出為pcapng
格式。$streams = tshark -r 10.1.13.246-14-25.pcapng -2 -R "tcp.flags.reset == 1" -T fields -e tcp.stream $filter="" foreach($stream in $streams) { $filter = "$filter tcp.stream eq $stream or" } ## 移除最后多余的or $filter= $filter.trim("or") tshark -r 10.1.13.246-14-25.pcapng -2 -R "tcp.stream eq $filter" -t ad -w 20190628.pcapng
通過將流號進行拼湊,然后篩選出所有流號的包。
合並包
我們可以通過tshark
過濾出我們需要的包並保存為文件,有時候我們可能需要把若干個包合並起來一起分析。則可以通過mergecap
進行合並。通過Usage: mergecap [options] -w <outfile>|- <infile> [<infile> ...]
,比如mergecap.exe -w e:\file\Wireshark\port.pcapng e:\file\Wireshark\port*
,將port
開頭的文件合並到port.pcapng
結論
通過對抓包文件進行腳本化的處理,可以做許多更為強大的數據分析。比如在軟件層面上對網絡連接進行異常監控及預警。實時的對包進行分析,有異常連接可以做到即使預警。
參考文獻
本文地址:https://www.cnblogs.com/Jack-Blog/p/11106195.html
作者博客:傑哥很忙
歡迎轉載,請在明顯位置給出出處及鏈接