第三十三期:使用wireshark抓包分析-抓包实用技巧
杰哥很忙?7月9日
前言
本文整理一下日常抓包使用的一些方法及抓包分析的一些方法。
本文基于wireshark2.2.6版本進行抓包處理。其他版本使用方式大同小異。
?
自定義捕獲條件
wireshark可以將抓包數(shù)據(jù)保存到硬盤上。若需要長時間抓包的話,需要防止內(nèi)存過大,因此一般需要指定一定大小切包,釋放內(nèi)存。
在捕獲-選項菜單中可以設置捕獲包的一些配置。
?
輸入配置
在輸入選項卡中可以選擇抓取指定接口,在下方過濾器中可以輸入過濾條件,比如host 172.17.1.100抓取指定ip的包,或tcp port 9055抓取指定端口的包。
?
輸出配置
在輸出選項卡中可以設置保存的文件路徑,包數(shù)量分組,文件大小分組,文件個數(shù)等配置。
1. 文件保存路徑:需要設置具體的文件名,wireshark會自動在文件名后加上序號和時間戳信息。比如文件名為1.pcapng,則會自動保存為如1_00001_20190625161142.pcapng的文件名。
?
2. 自動創(chuàng)建新文件可以通過接收到包的數(shù)量和大小以及抓包時間進行設置,通常通過文件大小抓包即可。
?
3. 文件個數(shù):通過勾選使用一個喚醒緩沖器來保存最大的文件數(shù)量。防止文件過多
?
在選項選項卡中還有一些其他的配置,根據(jù)實際情況決定是否勾選。
?
命令行抓包
wireshark提供了很強大的GUI界面,但是在生產(chǎn)環(huán)境長時間抓包使用GUI界面有以下問題:
?
界面刷新需要消耗資源,且GUI界面相比命令行界面,易出現(xiàn)閃退,卡死等不穩(wěn)定現(xiàn)象。
?
同時即使配置了切包,也會占用極大的內(nèi)存,需要將包信息顯示在界面,因此必須要等每次切包后才能釋放內(nèi)存。
?
相比命令行將數(shù)據(jù)持久化到硬盤上會立即釋放內(nèi)存,因為界面上只需要顯示簡單的抓包數(shù)量和文件保存路徑等信息。
?
下圖是通過GUI界面進行抓包的內(nèi)存占用情況,配置的是100M切一個文件,一般需要占用幾百兆的內(nèi)存。
下圖是通過命令行抓包的內(nèi)存占用情況,配置的是100M切一個文件,僅僅占用幾兆內(nèi)存。
在wireshark安裝目錄除了wireshark用于GUI界面的抓包程序以外還有一些其他的工具。
?
比如reordercap、text2pcap、tshark、rawshark、mergecap、mmdbresolve、capinfos、dumpcap、editcap等
?
其中tshark和dumpcap是用于命令行抓包的工具。
?
tshark就是命令行版的wireshark,tshark底層使用的即為dumpcap,因此tshark的功能相對強大一些,性能上則弱于dumpcap。
?
下圖是在傳輸速率為每秒37244,共傳輸1000000個825B大小的幀下產(chǎn)生的測試結果。
具體相關測試可以到Wireshark Packet Capture: Tshark Vs. Dumpcap查看,里面還有更多的不同的基準測試結果。
?
我們可以通過dumpcap抓包,然后通過tshark或wireshark進行包分析。
通過dumpcap -h查看命令參數(shù)。
-
-i: 抓取哪個網(wǎng)絡接口的包
-
-f: 過濾器,只抓取滿足過濾器的包。
-
-b filesize: 保存文件大小,即切包大小。
-
-b files:20: 保存文件個數(shù)。
-
-w: 保存的文件名。
?
在wireshark安裝目錄有*.html包含各個工具的命令及示例。
?
通過以上參數(shù)可以實現(xiàn)和GUI界面通過的抓包策略。比如
dumpcap -i 1 -f "tcp port 8080" -w D:\1.pcapng -b filesize:100000 -b files:20
表示抓取接口1的8080端口的tcp包,將數(shù)據(jù)保存到D:\1.pcapng路徑下,通過100M切一個文件,最多保存20個最新的文件。
?
抓取多個接口
若需要抓取多個接口的包,則通過多個-i參數(shù)指定,通過每個-i參數(shù)后面可以帶上-f配置過濾器。
比如dumpcap -i 1 -i 3 -f "tcp port 8080" -w D:\1.pcapng -b
表示抓取接口1和接口3的包。
通常來說我們需要抓取某個ip的包,那么我們需要知道這個ip是那個網(wǎng)絡接口。通過dumpcap -D可以獲取所有網(wǎng)絡接口。
?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)
最左邊的為我們輸入的參數(shù)-i的編號,右邊的亂碼的是中文名稱本地連接等字樣,如果不確定使用哪個網(wǎng)卡,也可以到wireshark中確認一下。
?
在輸入選項卡選擇接口下拉會有對應的地址。
命令輸入后就會顯示正在抓包的一些信息,Packets為抓取的包數(shù),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界面打開進行簡單分析。
若需要根據(jù)特定條件在大量信息中篩選出想要的信息,則需要通過tshark進行命令行的篩選。
案例:生產(chǎn)環(huán)境中發(fā)現(xiàn)時常有丟包現(xiàn)象,通過wireshark進行簡單分析發(fā)現(xiàn)有許多RST的重置連接包。追蹤流查看發(fā)現(xiàn),沒有正常建立連接。
通過tcp.flags.reset == 1篩選出大量的重置連接。大約占比1%的請求數(shù)據(jù)量。
?
為了確認每個包是不是都是同樣的原因。我們需要追蹤每個包的流進行查看。
?
在wireshark上選擇指定的包右鍵在彈出的菜單中選擇追蹤流-TCP流追蹤完整的流。
但是如果要追蹤大量的流,在wireshark上操作就不太方便了。
?
由于wireshark不支持批量選擇包跟蹤流,因此只能一個個跟蹤。
?
wireshark又不支持上一步歷史搜索,追蹤流實際wireshark是用了tcp.stream eq XXXX篩選流號。
?
因此我們需要重新在通過前一個篩選指令重新篩選。這樣就非常麻煩,尤其是若一個切包比較大的話,處理起來非常的慢。
?
由于上述原因,我們通過tshark命令行篩選出異常連接后批量跟蹤每個流并保存到文件進行分析。
?
批量分析
通過tshark -h可以查看命令從參數(shù),由于多命令和dumpcap類似,但是tshark還擴展了其他命令。
-r: 讀取本地的數(shù)據(jù)包文件。
-R: 捕獲過濾器,可用于捕獲符合過濾規(guī)則的報文。
-Y: 顯示過濾器,用于過濾已捕獲的報文。
-2: 若此時輸入回車,則會將包信息打印到控制臺上。
-w: 通過過濾器刪選后的包,保存另存到文件中,比如我們需要從某個包篩選出關鍵信息保存后進行單獨分析。
-T fields?: 格式化輸出,輸出屬性,我們要通過-e篩選包的指定屬性,則需要用該參數(shù)。
-e: 獲取指定包屬性,必須先指定-T fields格式化輸出,若有多個屬性輸出,則使用多個-e,比如-e tcp.stream -e tcp.port。
?
捕獲過濾器
捕獲過濾器是在捕獲菜單中,直接用過濾出指定的條件,不滿足條件的是不會被捕獲的。
顯示過濾器
顯示過濾器則是在已捕獲的包中進行過濾顯示。
捕獲過濾器的規(guī)則是host 192.168.0.115 and tcp port 8080,而對應的顯示過濾器規(guī)則是ip.addr eq 192.168.0.115 and tcp.port eq 8080,兩者的語法還是不同的。
?
實際通過tshark命令過濾時發(fā)現(xiàn),使用的都是顯示過濾器篩選。而在通過dumpcap -f抓包時需要使用捕獲過濾器的語法。
?
在簡單了解參數(shù)之后,開始使用命令篩選出我們需要的包。
?
批量篩選包
1. 篩選出需要的包。通過
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界面過濾一樣,它會篩選出所有滿足過濾條件的包。
?
2. 對每個包進行追蹤。
由于追蹤包的命令為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命令執(zhí)行腳本。
?$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
結論
通過對抓包文件進行腳本化的處理,可以做許多更為強大的數(shù)據(jù)分析。
比如在軟件層面上對網(wǎng)絡連接進行異常監(jiān)控及預警。實時的對包進行分析,有異常連接可以做到即使預警。
閱讀目錄(置頂)(長期更新計算機領域知識)https://blog.csdn.net/weixin_43392489/article/details/102380691
閱讀目錄(置頂)(長期更新計算機領域知識)https://blog.csdn.net/weixin_43392489/article/details/102380882
閱讀目錄(置頂)(長期科技領域知識)https://blog.csdn.net/weixin_43392489/article/details/102600114
總結
以上是生活随笔為你收集整理的第三十三期:使用wireshark抓包分析-抓包实用技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 时间序列(一):时间序列数据与时间序列预
- 下一篇: springboot2中session超