計算機網絡課上,需要我們靈活運用網絡協議分析儀wireshark,最近一直在看,感覺有點難,並不是軟件本身操作難,而是看懂一大群包的含義難,這個難主要也因為它是全英文的~~。。
好了,大致總結一下,基本都是大神的,引用的,與大家分享。
wireshark 開始抓包
開始界面
wireshark是捕獲機器上的某一塊網卡的網絡包,當你的機器上有多塊網卡的時候,你需要選擇一個網卡。
點擊Caputre->Interfaces.. 出現下面對話框,選擇正確的網卡。然后點擊"Start"按鈕, 開始抓包
Wireshark 窗口介紹
WireShark 主要分為這幾個界面
1. Display Filter(顯示過濾器), 用於過濾
2. Packet List Pane(封包列表), 顯示捕獲到的封包, 有源地址和目標地址,端口號。 顏色不同,代表
3. Packet Details Pane(封包詳細信息), 顯示封包中的字段
4. Dissector Pane(16進制數據)
5. Miscellanous(地址欄,雜項)
使用過濾是非常重要的, 初學者使用wireshark時,將會得到大量的冗余信息,在幾千甚至幾萬條記錄中,以至於很難找到自己需要的部分。搞得暈頭轉向。
過濾器會幫助我們在大量的數據中迅速找到我們需要的信息。
過濾器有兩種,
一種是顯示過濾器,就是主界面上那個,用來在捕獲的記錄中找到所需要的記錄
一種是捕獲過濾器,用來過濾捕獲的封包,以免捕獲太多的記錄。 在Capture -> Capture Filters 中設置
保存過濾
在Filter欄上,填好Filter的表達式后,點擊Save按鈕, 取個名字。比如"Filter 102",
Filter欄上就多了個"Filter 102" 的按鈕。
過濾表達式的規則
表達式規則
1. 協議過濾
比如TCP,只顯示TCP協議。
2. IP 過濾
比如 ip.src ==192.168.1.102 顯示源地址為192.168.1.102,
ip.dst==192.168.1.102, 目標地址為192.168.1.102
3. 端口過濾
tcp.port ==80, 端口為80的
tcp.srcport == 80, 只顯示TCP協議的願端口為80的。
4. Http模式過濾
http.request.method=="GET", 只顯示HTTP GET方法的。
5. 邏輯運算符為 AND/ OR
常用的過濾表達式
過濾表達式 | 用途 |
http | 只查看HTTP協議的記錄 |
ip.src ==192.168.1.102 or ip.dst==192.168.1.102 | 源地址或者目標地址是192.168.1.102 |
封包列表(Packet List Pane)
封包列表的面板中顯示,編號,時間戳,源地址,目標地址,協議,長度,以及封包信息。 你可以看到不同的協議用了不同的顏色顯示。
你也可以修改這些顯示顏色的規則, View ->Coloring Rules.
封包詳細信息 (Packet Details Pane)
這個面板是我們最重要的,用來查看協議中的每一個字段。
各行信息分別為
Frame: 物理層的數據幀概況
Ethernet II: 數據鏈路層以太網幀頭部信息
Internet Protocol Version 4: 互聯網層IP包頭部信息
Transmission Control Protocol: 傳輸層T的數據段頭部信息,此處是TCP
Hypertext Transfer Protocol: 應用層的信息,此處是HTTP協議
TCP包的具體內容
從下圖可以看到wireshark捕獲到的TCP包中的每個字段。
看到這, 基本上對wireshak有了初步了解, 現在我們看一個TCP三次握手的實例
三次握手過程為
這圖我都看過很多遍了, 這次我們用wireshark實際分析下三次握手的過程。
打開wireshark, 打開瀏覽器輸入 http://www.cr173.com
在wireshark中輸入http過濾, 然后選中GET /tankxiao HTTP/1.1的那條記錄,右鍵然后點擊"Follow TCP Stream",
這樣做的目的是為了得到與瀏覽器打開網站相關的數據包,將得到如下圖
圖中可以看到wireshark截獲到了三次握手的三個數據包。第四個包才是HTTP的, 這說明HTTP的確是使用TCP建立連接的。
第一次握手數據包
客戶端發送一個TCP,標志位為SYN,序列號為0, 代表客戶端請求建立連接。 如下圖
第二次握手的數據包
服務器發回確認包, 標志位為 SYN,ACK. 將確認序號(Acknowledgement Number)設置為客戶的I S N加1以.即0+1=1, 如下圖
第三次握手的數據包
客戶端再次發送確認包(ACK) SYN標志位為0,ACK標志位為1.並且把服務器發來ACK的序號字段+1,放在確定字段中發送給對方.並且在數據段放寫ISN的+1, 如下圖:
就這樣通過了TCP三次握手,建立了連接
File菜單介紹
菜單項 | 快捷鍵 | 描述 |
---|---|---|
Open… | Ctr+O | 顯示打開文件對話框,讓您載入捕捉文件用以瀏覽。 |
Open Recent | 彈出一個子菜單顯示最近打開過的文件供選擇。 | |
Merg | 顯示合並捕捉文件的對話框。讓您選擇一個文件和當前打開的文件合並。 | |
Close | Ctrl+W | 關閉當前捕捉文件,如果您未保存,系統將提示您是否保存(如果您預設了禁止提示保存,將不會提示) |
Save | Crl+S | 保存當前捕捉文件,如果您沒有設置默認的保存文件名,Wireshark出現提示您保存文件的對話框。 |
Save As | Shift+Ctrl+S | 讓您將當前文件保存為另外一個文件面,將會出現一個另存為的對話框 |
File Set>List Files | 允許您顯示文件集合的列表。將會彈出一個對話框顯示已打開文件的列表。 | |
File Set>Next File | 如果當前載入文件是文件集合的一部分,將會跳轉到下一個文件。如果不是,將會跳轉到最后一個文件。這個文件選項將會是灰色。 | |
File set>Previous Files | 如果當前文件是文件集合 的一部分,將會調到它所在位置的前一個文件。如果不是則跳到文件集合的第一個文件,同時變成灰色。 | |
Export> as “Plain Text” File… | 這個菜單允許您將捕捉文件中所有的或者部分的包導出為plain ASCII text格式。它將會彈出一個Wireshark導出對話框。 | |
Export >as “PostScript” Files | 將捕捉文件的全部或部分導出為PostScrit文件。 | |
Export > as “CVS” (Comma Separated Values Packet Summary)File… | 導出文件全部或部分摘要為.cvs格式(可用在電子表格中)。。 | |
Export > as “PSML” File… | 導出文件的全部或部分為PSML格式(包摘要標記語言)XML文件。將會彈出導出文件對話框。 | |
Export as “PDML” File… | 導出文件的全部或部分為PDML(包摘要標記語言)格式的XML文件。 | |
Export > Selected Packet Bytes… | 導出當前在Packet byte面版選擇的字節為二進制文件。 | |
Ctr+P | 打印捕捉包的全部或部分,將會彈出打印對話框。 | |
Quit | Ctrl+Q | 退出Wireshark,如果未保存文件,Wireshark會提示是否保存。 |
Edit——包括如下項目:查找包,時間參考,標記一個多個包,設置預設參數。(剪切,拷貝,粘貼不能立即執行。)
Edit菜單項
菜單項 | 快捷鍵 | 描述 |
---|---|---|
Copy>As Filter | Shift+Ctrl+C | 使用詳情面版選擇的數據作為顯示過濾。顯示過濾將會拷貝到剪貼板。 |
Find Packet… | Ctr+F | 打開一個對話框用來通過限制來查找包 |
Find Next | Ctrl+N | 在使用Find packet以后,使用該菜單會查找匹配規則的下一個包 |
Find Previous | Ctr+B | 查找匹配規則的前一個包。 |
Mark Packet(toggle) | Ctrl+M | 標記當前選擇的包。 |
Find Next Mark | Shift+Ctrl+N | 查找下一個被標記的包 |
Find Previous Mark | Ctrl+Shift+B | 查找前一個被標記的包 |
Mark ALL Packets | 標記所有包 | |
Unmark All Packet | 取消所有標記 | |
Set Time Reference(toggle) | Ctrl+T | 以當前包時間作為參考 |
Find Next Reference | 找到下一個時間參考包 | |
Find Previous Refrence… | 找到前一個時間參考包 | |
Preferences… | Shift+Ctrl+P | 打開首選項對話框,個性化設置Wireshark的各項參數,設置后的參數將會在每次打開時發揮作用。 |
View ——控制捕捉數據的顯示方式,包括顏色,字體縮放,將包顯示在分離的窗口,展開或收縮詳情面版的地樹狀節點
“View”菜單項
菜單項 | 快捷鍵 | 描述 | |||
---|---|---|---|---|---|
Main Toolbar | 顯示隱藏Main toolbar(主工具欄) | ||||
Filter Toolbar | 顯示或隱藏Filter Toolbar(過濾工具欄) | ||||
Statusbar | 顯示或隱藏狀態欄 | ||||
Packet List | 顯示或隱藏Packet List pane(包列表面板) | ||||
Packet Details | 顯示或隱藏Packet details pane(包詳情面板) | ||||
Packet Bytes | 顯示或隱藏packet Bytes pane(包字節面板) | ||||
Time Display Fromat>Date and Time of Day: 1970-01-01 01:02:03.123456 | 選擇這里告訴Wireshark將時間戳設置為絕對日期-時間格式(年月日,時分秒) | ||||
Time Display Format>Time of Day: 01:02:03.123456 | 將時間設置為絕對時間-日期格式(時分秒格式) | ||||
Time Display Format > Seconds Since Beginning of Capture: 123.123456 | 將時間戳設置為秒格式,從捕捉開始計時,見 | ||||
Time Display Format > Seconds Since Previous Captured Packet: 1.123456 | 將時間戳設置為秒格式,從上次捕捉開始計時 | ||||
Time Display Format > Seconds Since Previous Displayed Packet: 1.123456 | 將時間戳設置為秒格式,從上次顯示的包開始計時 | ||||
Time Display Format > —— | |||||
Time Display Format > Automatic (File Format Precision) | 根據指定的精度選擇數據包中時間戳的顯示方式 | ||||
Time Display Format > Seconds: 0 | 設置精度為1秒 | ||||
Time Display Format > …seconds: 0…. | 設置精度為1秒,0.1秒,0.01秒,百萬分之一秒等等。 | ||||
Name Resolution > Resolve Name | 僅對當前選定包進行解析 | ||||
Name Resolution > Enable for MAC Layer | 是否解析Mac地址 | ||||
Name Resolution > Enable for Network Layer | 是否解析網絡層地址(ip地址) | ||||
Name Resolution > Enable for Transport Layer | 是否解析傳輸層地址 | ||||
Colorize Packet List | 是否以彩色顯示包 | ||||
Auto Scrooll in Live Capture | 控制在實時捕捉時是否自動滾屏,如果選擇了該項,在有新數據進入時, 面板會項上滾動。您始終能看到最后的數據。反之,您無法看到滿屏以后的數據,除非您手動滾屏 | ||||
Zoom In | Ctrl++ | 增大字體 | |||
Zoom Out | Ctrl+- | 縮小字體 | |||
Normal Size | Ctrl+= | 恢復正常大小 | |||
Resiz All Columnus | 恢復所有列寬
|
||||
Expend Subtrees | 展開子分支 | ||||
Expand All | 看開所有分支,該選項會展開您選擇的包的所有分支。 | ||||
Collapse All | 收縮所有包的所有分支 | ||||
Coloring Rulues… | 打開一個對話框,讓您可以通過過濾表達來用不同的顏色顯示包。這項功能對定位特定類型的包非常有用 | ||||
Show Packet in New Window | 在新窗口顯示當前包,(新窗口僅包含View,Byte View兩個面板) | ||||
Reload | Ctrl+R | 重新再如當前捕捉文件 |
菜單項 | 快捷鍵 | 描述 |
---|---|---|
Back | Alt+Left | 跳到最近瀏覽的包,類似於瀏覽器中的頁面歷史紀錄 |
ForWard | Alt+Right | 跳到下一個最近瀏覽的包,跟瀏覽器類似 |
Go to Packet | Ctrl+G | 打開一個對話框,輸入指定的包序號,然后跳轉到對應的包。 |
Go to Corresponding Packet | 跳轉到當前包的應答包,如果不存在,該選項為灰色 | |
Previous Packet | Ctrl+UP | 移動到包列表中的前一個包,即使包列表面板不是當前焦點,也是可用的 |
Next Packet | Ctrl+Down | 移動到包列表中的后一個包,同上 |
First Packet | 移動到列表中的第一個包 | |
Last Packet | 移動到列表中的最后一個包 |
Capture——捕捉數據包
“Capture”菜單項
菜單項 | 快捷鍵 | 說明 |
---|---|---|
Interface… | 在彈出對話框選擇您要進行捕捉的網絡接口 | |
Options… | Ctrl+K | 打開設置捕捉選項的對話框並可以在此開始捕捉 |
Start | 立即開始捕捉,設置都是參照最后一次設置。 | |
Stop | Ctrl+E | 停止正在進行的捕捉 |
Restart | 正在進行捕捉時,停止捕捉,並按同樣的設置重新開始捕捉.僅在您認為有必要時 | |
Capture Filters… | 打開對話框,編輯捕捉過濾設置,可以命名過濾器,保存為其他捕捉時使用 |
Analyze ——包含處理顯示過濾,允許或禁止分析協議,配置用戶指定解碼和追蹤TCP流等功能。
“analyze”菜單項
菜單項 | 快捷鍵 | 說明 |
---|---|---|
Display Filters… | 打開過濾器對話框編輯過濾設置,可以命名過濾設置,保存為其他地方使用,見第 6.6 節 “定義,保存過濾器” | |
Apply as Filter>… | 更改當前過濾顯示並立即應用。根據選擇的項,當前顯示字段會被替換成選擇在Detail面板的協議字段 | |
Prepare a Filter>… | 更改當前顯示過濾設置,當不會立即應用。同樣根據當前選擇項,過濾字符會被替換成Detail面板選擇的協議字段 | |
Firewall ACL Rules | 為多種不同的防火牆創建命令行ACL規則(訪問控制列表),支持Cisco IOS, Linux Netfilter (iptables), OpenBSD pf and Windows Firewall (via netsh). Rules for MAC addresses, IPv4 addresses, TCP and UDP ports, 以及IPv4+混合端口 以上假定規則用於外部接口 |
|
Enable Protocols… | Shift+Ctrl+R | 是否允許協議分析,見第 9.4.1 節 “”Enable Protocols”對話框” |
Statistics ——包括的菜單項用戶顯示多個統計窗口,包括關於捕捉包的摘要,協議層次統計等等。
菜單項 | 快捷鍵 | 描述 |
---|---|---|
Summary | 顯示捕捉數據摘要 | |
Protocol Hierarchy | 顯示協議統計分層信息 | |
Conversations/ | 顯示會話列表(兩個終端之間的通信) | |
EndPoints | 顯示端點列表(通信發起,結束地址) | |
IO Graphs | 顯示用戶指定圖表,(如包數量-時間表) | |
Conversation List | 通過一個組合窗口,顯示會話列表 | |
Endpoint List | 通過一個組合窗口顯示終端列表 | |
Service Response Time | 顯示一個請求及其相應之間的間隔時間 |
Help——包含一些輔助用戶的參考內容。如訪問一些基本的幫助文件,支持的協議列表,用戶手冊。在線訪問一些網站,“關於”
菜單項 | 快捷鍵 | 描述 |
---|---|---|
Open… | Ctr+O | 顯示打開文件對話框,讓您載入捕捉文件用以瀏覽。 |
Open Recent | 彈出一個子菜單顯示最近打開過的文件供選擇。 |
如何進行“簡單”的抓包篩選。
其實關於wireshark來說,比較重要的還是數對抓包之后的“查詢統計分析”,如何在海量的數據包中,抓取出自己關注的數據包是處理問題的第一步,最后再講解一下如何進行“簡單”的抓包篩選。
為了直觀,本篇博文以一次實例進行,我在本地對網卡進行了抓包,登錄了一次QQ,與網友聊天,並且,訪問了一次我的博客www.zike.me,那我就從海量數據包中,抓取關於這兩個操作的相關數據包。
首先,我進行了本地抓包,進行了上述兩個操作,stop抓包,僅僅十多秒鍾,我抓到了3543個數據包,其中存在有我需要的數據包。(從這里看出了“篩選分析”有多么重要,如果數據流量較大,我試驗過,較小的網絡中,1分鍾左右的抓包,可以獲取300萬數據包)
原始數據包
輸入:oicq進行篩選
- oicq統計結果
查看單包的數據,在data處可以看見QQ號碼
選取第一個數據包,點擊右鍵,我們可以看見有很多選項,我們選取“follow UDP stream”,即追蹤該UDP流,跟蹤整個會話
可以看見,我的得到了該次聊天會話
同時,我們還可以選擇另外一種篩選方式,在詳細數據包中,我們選擇QQ號碼那一欄作為篩選的數據,點擊數據包QQ號碼處,右鍵,作為篩選……
接下來,我們看看由瀏覽器發起的對www.zike.me的訪問,我們主要看進行對dns數據包的篩選
第一步還是選擇協議,dns
同時,也可以直接選擇所訪問的域名:dns.qry.name == “www.zike.me”,直接進行篩選
下圖可以看見,我本機發起了對www.zike.me的查詢,我本地的緩存域名服務器是中國電信的61.128.128.68
然后看見DNS服務器進行回應,回復說www.zike.me的IP地址是173.231.1.221
同時,我們可以對本次抓包進行統計概況,如下圖
可以看見總述里面,包數,實時流量大小等等。
對本次抓包的協議總述